2010-09-24 67 views
2

在提供給成功回調函數jQuery的AJAX功能的數據「不要在一個循環中做功能」是指與未定義jQuery的價值時,試圖糾正的JSLint抱怨:

success: function (data) { ... 

但是這使得JSLint的不高興(「不要在循環中創建函數」)。

如果我按照How to fix jslint error 'Don't make functions within a loop.'?中的建議,Firebug會抱怨「數據未定義」並且回調函數失敗。

實施例:

之前$(document).ready(function(){

function ajaxSuccess() { 
    return function (data) { 
     alert (data); 
    }; 
} 

$(document).ready(function(){

$.ajax({ 
    type: "POST", 
    url: "some-url-here", 
    data: ({ "foo" : "bar" }), 
    success: ajaxSuccess(data) 
}); 

結果爲 「數據沒有定義」 錯誤。

但是,如果我將其更改爲

$.ajax({ 
    type: "POST", 
    url: "some-url-here", 
    data: ({ "foo" : "bar" }), 
    success: function (data) { 
     ajaxSuccess(data); 
    } 
}); 

那麼一切都是沒說的 - 但現在我回來了,我開始儘可能JSLint的關注。

假設我想通過JSLint,我怎樣才能得到由url返回的data,並將它傳遞給相關函數?

回答

2

success:需要的功能,但你不必創建一個只是爲了它。

function ajaxSuccess(data) 
    { 
    alert (data); 
    } 
// : 
// : 

$.ajax({ 
    type: "POST", 
    url: "some-url-here", 
    data: ({ "foo" : "bar" }), 
    success: ajaxSuccess  // note: no parameters, just the name. 
    } 
}); 

本來,你說:「創建一個新的功能,這需要一個數據parmeter,並將其分配給success」。我的版本說:「我已經有一個函數,它接受一個數據參數(名爲ajaxSuccess)。將它分配給成功」。

+0

好極了。謝謝,但如果還有其他參數,例如我們依賴全局變量? – PartialOrder 2010-09-24 17:02:17

+0

ajaxSuccess可以具有與成功相同的參數。我只是以一個爲例。 – 2010-09-24 18:08:33

+0

燈泡閃爍。謝謝詹姆斯 – PartialOrder 2010-09-24 19:24:13

0

您從未將數據作爲參數定義在ajaxSuccess中。

2

您將需要從您的通話ajaxSuccess()刪除的data參數,因爲data沒有定義的時候你怎麼稱呼它:

success: ajaxSuccess() 

或者,你真的不會需要有ajaxSuccess()回報功能。

function ajaxSuccess(data) { 
    alert(data); 
} 

success: ajaxSuccess 

編輯:

基於您的評論,你可以調用ajaxSuccess()喜歡你,並通過你想要的任何參數傳遞給它的,只要它們被定義。

function ajaxSuccess(param) { 
    return function (data) { 
     alert (param); 
     alert (data); 
    }; 
} 

success: ajaxSuccess("someParameter") 
0

處理javascript函數時總是考慮返回類型。另外,函數引用和函數結果之間也有區別。

// uncalled 
var ajaxSuccess = function(){};  // typeof(ajaxSuccess) == 'function' 
//called 
var ajaxSuccess = function(){}(); // typeof(ajaxSuccess) == 'undefined' 
  • 沒有return語句功能可按返回undefined當稱爲
  • 調用函數立即運行(這就是爲什麼說數據是不確定的)
  • 的分配未調用的函數是對該函數的引用(可以在稍後的時間點調用)
  • 調用的f unction是該函數的返回語句