2010-11-10 55 views
1

我正在使用MVC.net框架並運行到一個奇怪的問題與jQuery ajax調用。jquery.ajax間歇性調用獲取空數據和其他時間真實數據

我有一個頁面,允許用戶輸入金額,然後點擊'下一步'。當他們點擊「下一步」時,我會對服務器進行ajax調用,並通過JSON返回一些更新的信息。這都是非常標準的東西。

但是,奇怪的是與返回的JSON數據。 'data'變量(在回調中)有時是空的,有時它包含來自服務器的實際數據。奇怪的是,控制器的動作總是被調用,但返回的數據並不總是使它成爲ajax回調函數。它與超時間隔無關,因爲設置該值對問題沒有影響。

我經常可以觸發條件,當我調試動作代碼,但條件不經常發生時,我不調試。

有沒有人遇到過類似的問題,或者對變通或其他要調查的事情有任何建議?

var postbackUrl = "/Balance/Add?amt=" + $("#Amount").val(); 
$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: postbackUrl, 
    data: "{}", 
    dataType: "json", 
    success: function (data,status,request) { 
     $("#x_amount").val(data.x_newBalance) 

    } 
}); 

UPDATE: 在試圖獲得更深入的瞭解,我已經切換到使用3個變量版本回調。在所有情況下,狀態都是'成功'。有趣的是與請求。

該請求的狀態始終爲200,readyState爲4.與響應Body的區別在於。正如你所期望的那樣,當'data'爲null時,responseBody爲null,當'data'有效時,responseBody包含內容。

我想我需要弄清楚爲什麼responseBody被剝離出來。

回答

0

你有沒有試過jquery-ajax「timeout」參數?

$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: postbackUrl, 
    data: "{}", 
    timeout: 20000, 
    dataType: "json", 
    success: function (data) { 
    $("#x_amount").val(data.x_newBalance) 

    } 
}); 
+0

超時值不起作用。所以它一定是別的東西。 – yamspog 2010-11-10 20:48:22

+0

如果您的Ajax調用駐留在JS中,只要嘗試將其包含如下:

1

您正在使用JSON作爲請求內容類型,並仍然在查詢字符串中提供參數。爲什麼不直接使用:

$.ajax({ 
    type: 'POST', 
    url: '/Balance/Add', 
    data: { amt: $('#Amount').val() }, 
    dataType: 'json', 
    success: function (result) { 
     $('#x_amount').val(result.x_newBalance); 
    } 
}); 

還要注意,我用result作爲變量,以避免與data混淆。

+0

我試過你的建議,但仍然得到相同的行爲。我用更多的細節更新了這個問題。 – yamspog 2010-12-12 19:08:20

0

我看到在遠程服務器不可用時調用的傳遞給$ .ajax的成功回調,在這種情況下數據值爲空。這看起來不正確,也許它與你所看到的有關。

更新我的問題是jQuery 1.4.2中的錯誤,也許你遇到了同樣的問題? http://bugs.jquery.com/ticket/6172

+0

我不認爲這是問題,因爲http狀態爲200,但數據爲空。 – yamspog 2010-12-12 18:53:42