2010-12-09 35 views
4

我使用jQuery ajax函數以小型突發方式向服務器發送數據。每塊數據都是一個簡單的鍵值映射(data屬性傳遞給ajax函數)。如何將Ajax錯誤結果與原始請求關聯?

如果請求失敗,我的錯誤事件處理程序如何識別哪些特定數據集無法上傳?

jQuery的錯誤處理程序的函數簽名是:

error(XMLHttpRequest, textStatus, errorThrown) 

無論textStatuserrorThrown似乎確定發生故障的一套有用的數據,以及XHR似乎並沒有提供該功能無論是。

簡而言之,如果請求失敗,我希望能夠獲得我傳遞給ajax函數的dataid屬性。我怎樣才能做到這一點?

回答

7

檢查this ......從文檔 - 注重突出顯示部分:

beforeSenderrordataFiltersuccesscomplete選項都採取在適當的時候調用回調函數。該this對象爲所有的人都將是對象屬性在設置中傳遞給$.ajax; 如果沒有指定,它將會是對Ajax設置本身的引用。

所以,在error()回調(也successcomplete等),this將被傳遞到$.ajax()對象 - 除非你使用的是context參數來改變它。

作爲一個說明,該data PARAM傳遞到$.ajax()將被轉換爲一個GET或POST請求

另一種選擇一個序列化的字符串,就是隻要確保你的error()回調訪問的變量同樣的範圍:

(function() { 
    // create a scope for us to store the data: 
    var data = {id: 1}; 
    $.ajax({ 
     url: '/something-to-genereate-error', 
     data: data, 
     error: function() { 
     console.log(this, data); 
     } 
    }); 
})(); // call the function immediatey 

See this fiddle for an example - 請注意,thisdata"id=1" wereas的data我們召開的副本仍然是{id:1}

而且 - 請注意,這裏的關閉((function() { .... })())是非常必要的,它只是呈現方式傳遞入$.ajax()和使用它在回調之前,將data變量存儲。很可能這個ajax調用已經存在於你可以這樣做的函數中。

0

好吧,我想我找到它(根據我以前的答案,從gnarf之一,

$.ajax({ 
    type: "POST", 
    url: "not-found",   
    context: {id: 123, name: "hello world"},   
    error: function(){ 
     console.debug($(this)); //only works in chrome      
    } 
}); 
+0

謝謝! XHR的哪個屬性包含請求參數? – 2010-12-09 18:59:05

+0

有趣。看起來沒有,你可以嘗試使用這些事件添加一個頭http://docs.jquery.com/Ajax_Events – 2010-12-09 19:53:25