2016-01-21 146 views
0

有沒有辦法刪除使用jQuery的ajaxSuccess創建的監聽器?有沒有辦法刪除用ajaxSuccess創建的監聽器?

我會感興趣的是刪除恰好指定給變量的偵聽器,或者刪除所有現有的ajaxSuccess偵聽器的方法。

另一個角度可能是追溯導致問題「成功」的請求的方式,以及元素相關事件觸發該請求的方式;理想上類似於「普通」事件監聽器中的event.target屬性。看來ajaxSuccess'event參數是一個不同的動物物種,並沒有target財產和沒有preventDefault方法。許多投手,一個捕手,但沒有捕手識別。也許除了ajaxSuccess之外還有一個工具?但願不是從零開始做飯的jQuery .ajax其他...

+0

燦創建jsfiddle http://jsfiddle.net來演示?預期的結果是什麼? – guest271314

+2

不會做任何好事來嘗試阻止ajaxSuccess回調中的元素事件...事件將會很長時間完成。你到底需要做什麼? – charlietfl

回答

2

我有興趣在任何辦法來消除這種情況發生 被賦給變量聽衆,或辦法來消除所有現存 的ajaxSuccess聽衆

嘗試使用.off()

$(document).off("ajaxSuccess") 
+0

這實際上工作!我猜jQuery AJAX事件至少有一件事與元素事件有共同之處。 – Lori

1

有元素的事件和Ajax等比開發人員使用沒有關係做ajax電話。

然而,您可以修改xhr對象,同時設置每個請求並訪問ajaxSuccess回調中的特定屬性。這些可以是幫助您管理應用程序的任意屬性和值。例如,如果你想要一個實際的元素事件傳遞給回調

您也可以檢查設置對象將包含URL和使用的條件代碼

簡單的例子:

$.ajax({ 
    url:'...', 
    beforeSend:function(xhr){ 
     xhr.myData = 'some value'; 
    } 
    ... 
}); 

$(document).ajaxSuccess(function(event, xhr, settings) { 
    console.log(xhr.myData); 
}) 
+0

如果元素事件名爲'.ajax()'可以在'beforeSend'內設置'context'到'event.target',將'this'設置爲'event.target':觸發'$ .ajax( )''.done()','.fail()' – guest271314

+0

@ guest271314好想法。許多方法來解決這個 – charlietfl

+0

所以'beforeSend'可以添加屬性到什麼成爲'.ajaxSuccess'的'xhr'參數?在使用'window'的屬性作爲一種全局變量的意義上,這被認爲是kludgey嗎?看起來好像'beforeSend'是設計中的數據傳輸設備,所以可能不是。這個特殊的技巧不會幫助我的情況(我認爲),因爲AJAX調用通過使用'/ something.json'(Rails路由)作爲jQuery API自動填充字段的'source'來啓動。 – Lori