1
我正在使用JQuery爲本地服務創建AJAX。我的本地服務是一個HttpHandler(例如,Request.ashx)。在Request.ashx中,負責調用外部網站(例如CallExternalWebsite())。 CallExternalWebsite()使用.NET的System.Net.WebRequest()來發起請求。訪問外部網站時,不會觸發成功或錯誤事件。 (注:我也試過這個在IIS託管的WCF服務,我看到了同樣的結果)Ajax成功事件在調用服務時不會觸發
這裏有兩種情況:
此方案的工作原理:
- 在的ProcessRequest( ),註釋掉 callExternalWebsite()。
- 對於對象o,用數據初始化以模擬結果。
- 點擊myButton
- 成功事件觸發客戶端。
- 在Fiddler中,我可以看到標題信息。我看到JSON結果等
此方案不起作用:
- 在的ProcessRequest(),使呼籲callExternalWebsite()。
- 對於對象o,callExternalWebsite()將返回一個適當的對象。
- 點擊myButton
- 成功事件不會在客戶端觸發。
- 在Fiddler中,我可以看到標題信息。我看到Json結果等。
- 我知道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);
}
有什麼想法?
謝謝。
史蒂夫
確定的響應是HTTP 200/OK?我相信只有2xx的狀態碼纔算是「成功」 – 2012-04-13 13:20:39
請將代碼發佈到'AjaxSucceeded'?也許那裏有問題。嘗試將成功調用更改爲alert(「hello!」)或類似的命令,以確認成功分支未執行。 – 2012-04-13 13:26:07
我將成功改爲: '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