我正在研究一个基本的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页面代码。
我在这里缺少什么?
答案 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