Jquery Ajax调用服务器返回json
首先是一个bug的教训
客户端代码:
$("#send").click(function () {
$.ajax({
url: "../JqueryAjax/JqueryAjaxServer.aspx",
type: 'get',
contentType: "application/json; charset=utf-8",
dataType: "json",
timeout: 30000,
data: "{}",
success: function (data, textStatus) {
alert("success");
alert(data.username);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("error");
alert(textStatus);
alert(errorThrown.toString());
}
});
});
服务器端是一个asp.net的webform页面。
.cs文件的代码如下:
protected void Page_Load(object sender, EventArgs e)
{
//Response.Write("你好:"+Request.Form["name"]+"你的年龄是:"+Request.Form["age"]);
Response.ContentType ="application/json";
string json = "{\"username\":\"test\"}";// ,\"content\":\"test\"
Response.Write(json);
}
这样调用一直会出现错误。提示Invalid json,纠结了好久通过微软的asp.net论坛提问才解决。这里的json格式是没有错误的,由于是在Page_Load之后asp.net服务器端会继续触发接下来的各个事件,最后输出的是一整个html页面。因此会出现(下图)提示错误。解决办法是在最后面加一句Response.End().将当前所有缓冲的输出发送到客户端,停止该页的执行,并引发 System.Web.HttpApplication.EndRequest 事件。这样就只会输出json字符串。或者是将服务器端的aspx页面除page指令外的代码注释掉。注意这种情况与请求一般处理程序和MVC下action的区别。