我正在開發一個移動設備的網站,它使用jQuery(v 1.7.2)將ajax調用到ASP.NET(v 2.0.50727)Web服務。jQuery ajax POST調用ASP.NET Web服務隨機失敗
該調用在95%的時間內正常工作,但會隨機失敗,返回500個內部服務器錯誤。在第一行代碼執行前(第一行寫入事件日誌),它在服務器端失敗。
我還沒有看到使用我記得的桌面瀏覽器的通話失敗,但我已經看到它使用iPad的足夠的失敗。我添加了
<browserCaps userAgentCacheKeyLength="256">
到Web服務的web.config文件,但這並沒有幫助。
的javascript:
'{"formURL":"fileName.xml", "rowNumber":"1"}'
C#
[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string getImage(string formURL, string rowNumber) {
log("Retrieving image of form " + formURL);
string image = "";
string username = /*retrieve username*/;
string password = /*retrieve password*/;
if (username != null && username != "") {
image = /*code to retrieve the image*/;
}
return image;
}
private void log(string message) {
EvLog.WriteToEventLog(DateTime.Now.ToString("MM:dd:yyyy H:mm:ss:fff") + Environment.NewLine + message, 10);
}
我發現的唯一的事情是有所幫助我,是:傳遞到Web服務
$.ajax({
type: "POST",
url: serverURL + "/getImage",
data: '{"formURL":"' + url + '", "rowNumber":"'+rowNumber+'"}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg,textStatus, jqXHR) {
...
}, error: function(xhr, ajaxOptions, thrownError) {
...
}
}).done(function(){
console.log("getImage call is done");
});
示例數據當調用失敗時,因爲來自Web服務的響應頭包含「jsonerror:true」,儘管我沒有能夠確定它爲什麼會隨機失敗。
任何幫助表示讚賞!
難道是它無法發送數據時它以某種方式包含無效的JSON?也許在文件名或rownumber中有一些無效的字符?將數據添加到變量中,例如:var data ='{「formURL」:''+ url +'「,」rowNumber「:」'+ rowNumber +'「}''然後添加一個'console.log(data)在ajax調用之前,它應該向您顯示您要在瀏覽器調試工具的conole輸出窗口中發送的數據。 Debugging工具內置於Chrome和IE(我認爲是F12熱鍵),而FF則需要安裝FireBug AddOn。 – Nope 2012-08-14 18:25:26
除了下面的答案之外,你可以嘗試在ajax調用'traditional:true'中設置另一個設置。我們發現爲了發佈JSON而工作,但我們使用ASP.NET MVC3,但仍值得一試。 「傳統:真實」會導致「淺」序列化。在這裏看到更多的細節:http://api.jquery.com/jQuery.ajax/和http://api.jquery.com/jQuery.param/ – Nope 2012-08-14 18:32:44
我有日誌聲明之前,ajax調用是看什麼它會在同一數據集上隨機失敗(多次調用使用相同的數據) – user1324855 2012-08-14 18:33:29