没有Response.End()代码不能正常工作

时间:2014-01-07 17:19:14

标签: c# javascript jquery json

我正在使用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; }

    }

2 个答案:

答案 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!");
                }
            });

信息:

  1. Webmethod
  2. jQuery ICM webmethod call (stackoverflow answer)
  3. Google上的搜索jQuery c# Webmethod可以找到更多信息。
  4. <强> 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实现的)