我正在使用jquery ajax函数,我收到成功函数中的数据如果在服务器端放置Response.End()我不明白这背后的原因是什么????
<script type="text/javascript">
$(document).ready(function() {
$.ajax({
url: "WebForm1.aspx",
type: "POST",
datatype: "json",
success: function(data) {
alert(reuslt.CustomerID);
}
});
});
在WebForm1.aspx
中protected void Page_Load(object sender, EventArgs e)
{
Customer c = new Customer();
c.CustomerID = "1";
c.ContactName = "Jhon";
c.CompanyName = "Dell";
JavaScriptSerializer serializer = new JavaScriptSerializer();
String response = serializer.Serialize(c);
Response.Write(response);
Response.End();
}
客户类
public class Customer
{
public string CustomerID { get; set; }
public string CompanyName { get; set; }
public string ContactName { get; set; }
}
答案 0 :(得分:2)
您没有使用Webmethod,这意味着de .aspx文件仍然提供HTML的响应。 Response.end()
结束响应,这意味着不再执行任何代码。
您需要做的是:
在VB文件中:
[System.Web.Services.WebMethod(BufferResponse=false)]
public Customer getCustomer()
{
//implementation code
return new Customer(); // The code you need
}
jQuery的:
$.ajax({
type: "POST",
url: "WebForm1.aspx/getCustomer", // Webmethod function here
data: {},
contentType: "application/json;charset=utf-8",
dataType: "json",
async:false,
success: function (json) {
var msg = JSON.parse(json.d);
alert(msg.customerID);
},
failure: function () {
alert("Sorry,there is a error!");
}
});
信息:
jQuery c# Webmethod
可以找到更多信息。 <强> UDPATE 强>
因为阿里希望具体了解response.end
的原因而没有它失败。因为response.end
将结束请求。所以没有执行更多的代码。这意味着HTML不会呈现。如果没有此代码,则呈现HTML并将其作为响应进行响应。这意味着JSON + HTML是请求的输出。
将所有当前缓冲的输出发送到客户端,停止执行 页面,并引发EndRequest事件。
由于Response.end
引发了文档引用的异常(上图)。最好使用HttpContext.Current.ApplicationInstance.CompleteRequest
答案 1 :(得分:1)
我不知道手头的确切输出,但想法是你的网页表单(.aspx)使用页面生命周期。如果您没有通过调用Response.End()
来结束生命周期,页面将继续处理并发送到输出流。
因此,如果您没有告诉ASP.NET停止输出到响应流,它最终将到达其呈现阶段并写出.asxp文件的内容。
如果您没有致电Response.End()
查看返回的内容,请尝试使用Fiddler查看生成的响应/ html。
(还有@Niels所说的 - 我的答案更多是针对非ajax实现的)