ajax调用后台方法,求大神

写了一段ajax的代码,原意是打算,当选择句子时,用ajax将选中的句子传回后台,当ajax回传成功时,执行后台方法BTCompare。但是现在页面加载的时候直接执行了BTCompare,反而点击按钮触发ajax的时候不执行

        //选取句子,点击按钮,传送回后台
        function ajaxSend() {
            $('#btnSend').attr('disabled', true)
            $.ajax({
                type: "Post",
                url: "Reader.aspx/GetStr",
                async: false,
                data:"{'s':'"+selectedText+"'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {
                     alert(data.d);
                    if (data.d)
                    {
                        function Init() {
                            var s = '<%=BtCompare() %>';
                        }
                    }
                },
                error: function (err) {
                    alert("data error");
                }
            });
        }
        document.onmousedown = function () { selectedText = false; }
        document.onmouseup = function (e) {
            e = e || window.event;
            selectedText = window.getSelection ? window.getSelection().toString() : document.selection ? document.selection.createRange().text : false;
            if (selectedText) {
                //判断页面是否有滚动,有的话还得加上滚动的距离,要不按钮定位不准
                var sl = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft),
                st = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
                $('#btnSend').css({ left: e.clientX + sl, top: e.clientY + st }).show().attr('disabled', false);
            }
        }

1个回答

 var s = '<%=BtCompare() %>';

是服务器端的代码,肯定是执行完毕了才会向客户端发送你的值。

你这个要求另外发送一个ajax请求就好了,或者将你的BtCompare放到Reader.aspx/GetStr这个方法里面调用,然后输出你内容就好了,通过回调函数的参数data可以得到你的BtCompare返回值

注意GetStr是通过Response.Write输出或者直接return 返回BtCompare的值,不能设置服务器控件的内容,这2个是不同的请求,不会反映到你的html页面

 [WebMethod]
    public static string GetStr(string s)
    {
        return BtCompare(s);//////////////////////
    }

    private string BtCompare(string s)////////参加参数,是从客户端发送的选择的网页内容,自己修改参数
    {
        //在页面选中一段句子,在某个地方弹出一个按钮,点击按钮,将选中的句子传入到下面的s当中,然后调用方法,将两个东西传入到o.txt和s.txt,然后比较,接着切割句子,最后输出
        //string s = "As a linguist, he acknowledges that all varieties of human language, including non-standard ones like Black English, can be powerfully expressive--there exists no language or dialect in the world that cannot convey complex ideas.";//在前台选中语句,传入到这里

        demo gg = new demo();
        string[] sentence = gg.SentenceDetect(linkWord);
        string otxt = gg.Parse(sentence);//放在o.txt
        FileStream fotxt = new FileStream(@"D:\\parser\\o.txt", FileMode.Create);
        StreamWriter ot = new StreamWriter(fotxt);
        ot.Write(otxt);
        ot.Flush(); //清除缓存
        ot.Close();
        ot.Dispose();
        fotxt.Close();

        DoParser doq = new DoParser();
        string stxt = doq.parser(linkWord);//放在s.txt
        FileStream fstxt = new FileStream(@"D:\\parser\\s.txt", FileMode.Create);
        StreamWriter st = new StreamWriter(fstxt);
        st.Write(stxt);
        st.Flush();
        st.Close();
        st.Dispose();
        fstxt.Close();

        Process p = new Process();
        p.StartInfo.FileName = @"cmd.exe";
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardInput = true;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.RedirectStandardError = true;
        p.StartInfo.CreateNoWindow = true;
        p.Start();

        string str = "D:\\BCompare\\BCompare.exe @D:\\parser\\BCconsle.txt D:\\parser\\o.txt D:\\parser\\s.txt D:\\学习档案\\Reading\\Reading\\report.html ";//保存到当前目录下
        p.StandardInput.WriteLine(str);
        p.StandardInput.WriteLine();
        p.StandardInput.AutoFlush = true;
        p.StandardInput.WriteLine("exit");
        p.StandardOutput.ReadToEnd();
        p.Close();
        Report.Text = "<iframe src='report.html'frameborder='0' height=350px width=100%></iframe>";

        Utils uu = new Utils();
        //String[] ss = uu.subSentenceASC(s);//先长后短句
        String[] ss = uu.subSentenceDESC(stxt);//先短后长句
        int count = 0;
                string rst="";///////////
        foreach (string aa in ss)
        {
             rst += ++count + "、" + aa + "<br />";///////////////////
        }
                return rst;
    }



success: function (data) {
                     alert(data.d);
                    if (data.d)
                    {////////将BtCompare得到的返回值设置到容器里面

                                        $('#xxxxxxxxxxxxx').html(d.data);//注意修改选择器
                    }
                },
hong34210
hong34210 非常感谢你,我终于把这个问题给解决了
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问