为什么尽管200 OK状态,AJAX JSON响应失败?

时间:2016-06-14 12:50:52

标签: c# jquery asp.net json ajax

我正在研究一个基本的ASP.NET& AJAX / JSON任务,我对它的工作感到沮丧。其中一个要求是创建一个AJAX / JSON方法来对SQL DB数据进行一些操作。

为了完成这个,我使用了以下代码:

在aspx中:

    $.ajax({
              type: "GET",
              dataType: "json",
              url: "Retrieve",     
              success: function (data) {
                  alert(data);
                  var col;
                  for (col in data) {
                      alert(col);
                      addRow(data[col].id, data[col].Name, data[col].catagory, data[col].difficulty, data[col].company, data[col].price, '#products');
                  }
              },
              error: function () {
                  alert("1");

              }

在“retrieve.aspx”页面(为JSON创建数据的代码部分):

    Response.ContentType = "application/json; charset=utf-8";
            bool val1 = (System.Web.HttpContext.Current.User != null) && System.Web.HttpContext.Current.User.Identity.IsAuthenticated;
            string category = Request.QueryString["category"];
            //string a = JsonConvert.SerializeObject(getProducts(category));
            var a = getProducts(category);
            // instantiate a serializer
            JavaScriptSerializer TheSerializer = new JavaScriptSerializer();

            var TheJson = TheSerializer.Serialize(a);
            Response.Write(TheJson);

最后但并非最不重要的是,如果我尝试将dataType更改为文本,它将显示内容是JSON结构文本以及HTML页面代码。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

您需要确保ASP.NET不会在您放入响应的json内容之外呈现任何其他内容。为此,请事先清除响应:

Response.Clear();
Response.ContentType = "application/json; charset=utf-8";
...

最后立即完成回复:

Response.Write(TheJson);
HttpContext.Current.ApplicationInstance.CompleteRequest();

请参阅this excellent answer,了解为何CompleteRequest应在此处使用,而不是更广泛使用Request.End()

然而,使用页面输出JSON似乎是一种开销。您可能想要检查更简单的方法,即Http Handlers。互联网上有很多例子,这里是one