日期:2014-05-17  浏览次数:20440 次

Ajax请求aspx页面问题
我在aspx页面中用ajax来请求页面,有个问题。就是我在后台输出数据的时候为什么一定要加上Response.End()的时候,异步对象才能获取到数据,如果不加这句话,就老是报错,说少了个";"分号。

前台页面1124-02-JQuery-getJson.aspx代码:
$(function () {
            $("#btnLogin").click(function () {
                $.getJSON("1124-02-JQuery-getJson.aspx?userName=" + $("#userName").val() + "&userPwd=" + $("#userPwd").val() + "&callback=?"+"&flag=1", function (data) {
                    alert("服务器返回的结果为:" + data);
                    $("#userName").val(data);
                });
            });
        });


后台页面1124-02-JQuery-getJson.aspx.cs代码:

string userName = Request.QueryString["userName"];
        string userPwd = Request.QueryString["userPwd"];
        string flag=Request.QueryString["flag"];
        if (!string.IsNullOrEmpty(flag))
        {
            if (userName == "linjie" && userPwd == "123")
            {
                string fun = (Request.QueryString["callback"]);
                Response.Write(fun + "('登录成功!')");
               Response.End();
            }
        }
注意看我后台页面加黑的那句话。也就是我必须要加上这句话,前台页面才能alert()到输出的数据,如果不加上加黑的这句Response.End()这句话,前台页面就会报错,说缺少分号";"

这个问题我有点迷糊呢。如果不加Response.End这句话,它不是在Response.Write输出数据后也输出html页面字符串吗,这个应该不受影响才对啊,我并没有输出要实行的javaScript代码字符啊

------解决方案--------------------
很简单。按道理说,你应该用ashx来输出自定义的内容。asp.net要为aspx创建一个Page对象实例,要走普通的Page页面的完整生命周期,因此就算你在aspx设计页面上有个 &nbsp 之类的随便什么东西都要解析成服务器控件 LiteralControl 之类的然后输出,自然有一大堆意外的东西,你需要用 Respose.End 语句终止正常的Page页面输出。