2015-04-28 90 views
0

好讓我們開始,jQuery的傳遞函數回調,但使用的返回值的

我在JavaScript中,只是使它更容易記住值需要什麼,爲了得到它要插入創建一個ajax命名空間工作。

(function (ns) { 
    ns.type = "POST"; 
    ns.url = "/"; 
    ns.data = {}; 
    ns.success = function() {}; 

    ns.send = function() { 
     $.ajax({ 
      type: ns.type, 
      url: ns.url, 
      data: ns.data, 
      success: ns.success() 
     }); 
    } 

}(fps.ajax)); 

,以利用它我下面

var ajax = fps.ajax; 
ajax.url = "/credit/getBalance"; 
ajax.type = "GET"; 
ajax.success = function (e) { 
    navCredits.text(navCredits.text().f(e)); 
}; 
ajax.send(); 

我現在遇到的問題是我成功的功能。

我把它傳遞給我一個變量,我希望我的ajax函數使用它作爲返回數據,但它不會以這種方式發生。

我對此的理解是,(e)沒有聲明成功函數被設置的位置,所以爲什麼我會得到一個未定義的值。

我的問題是,是否有一種方法來傳遞函數與「參數」,函數應該使用它自己的函數值?

我不覺得我解釋得很好,但希望有足夠的代碼來幫助您瞭解我想要實現的目標。

親切的問候

+0

成功函數內部是什麼'f()' –

+3

您正在執行您的成功函數,而不是將其指定爲處理函數。從「success:ns.success()」行中刪除()。 – Daved

+0

我爲String類創建了一個格式原型,它基本上與C#string.format()函數的作用相同。它基本上將用f()中的傳遞值替換{0} {1} {2}。 –

回答

2

你執行你的成功函數,而不是作爲處理分配給它的。從「success:ns.success()」行中刪除()。

ns.send = function() { 
    $.ajax({ 
     type: ns.type, 
     url: ns.url, 
     data: ns.data, 
     success: ns.success // you don't want to execute 
    }); 
} 

當你在函數引用後面加上「()」時,它會在那時執行它。在你的情況下,它執行一個空的函數,就像幾行代碼中定義的那樣。你的成功功能與事件的論據是一致的,但從未被使用。

當您刪除「()」時,它將該函數對象分配給該屬性。當你添加「()」時,它會在那一刻執行函數,並將返回值賦給屬性。並且,當jQuery「ajax」調用成功完成時,成功函數將在該對象上執行,因此他們在那時處理添加「()」。 ;)

+0

非常感謝。我很確定我已經嘗試過,但顯然不是!再次感謝! –