调用服务时不会触发Ajax Success事件

时间:2012-04-13 13:00:46

标签: c# jquery asp.net ajax

我正在使用JQuery为本地服务制作AJAX。我的本地服务是HttpHandler(例如,Request.ashx)。在Request.ashx中,它的职责是调用外部网站(例如,CallExternalWebsite())。 CallExternalWebsite()使用.NET的System.Net.WebRequest()来发起请求。访问外部网站时,不会触发成功或错误事件。 (注意:我也试过这个在IIS中托管的WCF服务。我看到了相同的结果

以下是两种情况:

此方案有效:

  1. 在ProcessRequest()中,注释掉 callExternalWebsite()。
  2. 对于对象o,初始化数据以模拟结果。
  3. 点击myButton
  4. 成功事件在客户端触发。
  5. 在Fiddler中,我可以看到标题信息。我看到Json的结果等等。
  6. 此方案无效:

    1. 在ProcessRequest()中,启用对callExternalWebsite()的调用。
    2. 对于对象o,callExternalWebsite()将返回一个合适的对象。
    3. 点击myButton
    4. 成功事件不会在客户端上触发。
    5. 在Fiddler中,我可以看到标题信息。我看到Json的结果等等。
    6. 我知道callExternalWebsite()正在运行,因为我已将结果发送到手机。
    7. 总结一下,HttpHandler中的外部http调用正在影响Ajax成功事件。

      以下是来自AJAX调用的片段: (我正在尝试不同的互动)

          $(document).ready(function () {
              $("#myButton").click(function (event) {
      
                  $.ajax({
                      cache: false,
                      type: "POST",
                      url: "http://localhost/Service/Request.ashx",
                      data: '{"id" : "053252f3"}',
                      contentType: "application/json; charset=utf-8",
                      dataType: "json",
                      timeout: 20000,
                      success: function (msg) {
                          AjaxSucceeded(msg);
                      },
                      error: AjaxFailed
                  });
              });
          });
      

      在HttpHandler Request.ashx中,

      public Void ProcessRequest(httpContent context)
      {
      //  Do some stuff....
      
      // Make call to external web site
      object o = callExternalWebsite (Uri, Data, "POST");
      
      // Return results from callOtherWebsite 
              JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
              string json = javaScriptSerializer.Serialize(o);
              context.Response.ContentType = "application/json";
              context.Response.Write(json);
      
      }
      

      有什么想法吗?

      感谢。

      史蒂夫

1 个答案:

答案 0 :(得分:0)

如果你这样做会发生什么,msg vs msg.d:

$(document).ready(function () {
    $("#myButton").click(function (event) {

        $.ajax({
            cache: false,
            type: "POST",
            url: "http://localhost/Service/Request.ashx",
            data: '{"id" : "053252f3"}',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            timeout: 20000,
            success: function (msg) {
                AjaxSucceeded(msg.d);
            },
            error: AjaxFailed
        });
    });
});