2012-04-13 49 views
1

我正在使用JQuery爲本地服務創建AJAX。我的本地服務是一個HttpHandler(例如,Request.ashx)。在Request.ashx中,負責調用外部網站(例如CallExternalWebsite())。 CallExternalWebsite()使用.NET的System.Net.WebRequest()來發起請求。訪問外部網站時,不會觸發成功或錯誤事件。 (注:我也試過這個在IIS託管的WCF服務,我看到了同樣的結果Ajax成功事件在調用服務時不會觸發

這裏有兩種情況:

此方案的工作原理:

  1. 在的ProcessRequest( ),註釋掉 callExternalWebsite()。
  2. 對於對象o,用數據初始化以模擬結果。
  3. 點擊myButton
  4. 成功事件觸發客戶端。
  5. 在Fiddler中,我可以看到標題信息。我看到JSON結果等

此方案不起作用:

  1. 在的ProcessRequest(),使呼籲callExternalWebsite()。
  2. 對於對象o,callExternalWebsite()將返回一個適當的對象。
  3. 點擊myButton
  4. 成功事件不會在客戶端觸發。
  5. 在Fiddler中,我可以看到標題信息。我看到Json結果等。
  6. 我知道callExternalWebsite()正在工作,因爲我已將結果發送到我的手機。

總結起來,HttpHandler中的外部http調用正在影響Ajax成功事件。

這裏是AJAX調用的代碼段: (我嘗試不同的interations)

$(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

確定的響應是HTTP 200/OK?我相信只有2xx的狀態碼纔算是「成功」 – 2012-04-13 13:20:39

+0

請將代碼發佈到'AjaxSucceeded'?也許那裏有問題。嘗試將成功調用更改爲alert(「hello!」)或類似的命令,以確認成功分支未執行。 – 2012-04-13 13:26:07

+0

我將成功改爲: 'success:function(msg){alert(「hello」); }' 但仍然沒有執行。 以下是來自Request.ashx調用的響應: HTTP/1.1 200 OK Cache-Control:private Content-Type:application/json; x-AspNet-Version:4.0.30319 X-Powered-by:ASP.NET 日期:2012年4月13日星期五16:28:40 GMT Content-長度:84' 一切似乎很好。 – Steve 2012-04-13 16:31:27

回答

0

如果你這樣做,味精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 
     }); 
    }); 
}); 
相關問題