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的区别。

posted @ 2010-12-29 21:22  雁北飞  阅读(903)  评论(0编辑  收藏  举报