2011-12-22 77 views
1

我寫了一個函數,我允許回調傳遞給。然後我想用ajax repsonse和另一個參數來執行它。將回調和其他參數傳遞給jQuery ajax成功?

我的問題是執行回調,並且當我單步執行代碼時,它看起來像使用正確的參數調用該函數,但是當實際加入回調函數時,第一個參數的值爲無論我分配給第二個參數,第二個參數是undefined

這裏是我的功能:

namespace = { 
fetch : function(sr, count, callback) { 
    srCount = count ? count : '25' 
    var sub; 
    if (sr == 'frontpage'){ 
     sub = ''; 
    }else{ 
     sub = 'foo/' + sr + '/'; 
    }; 
    $.ajax({ 
     url: "http://www.example.com/"+sub+ ".json?count=" + count, 
     dataType: "json", 
     success: function(msg) 
     { 
      callback.call(msg, count) 
     } 
    }) 
}; 

現在,當我這樣稱呼它:

mynamespace.fetch($(this).attr('href'), 25, true, another namespace.createPost); 

我希望callback.call(msg, count)解析爲callback.call(/*the ajax response*/, 25);

然而,當我運行它,我得到msg == 25count == 'undefined'。我在爲什麼虧損?

+0

'mynamespace.fetch($(this).attr('href'),25,true,another namespace.createPost);'。什麼是'真實'的? – 2011-12-22 19:31:54

+0

我複製並粘貼的舊代碼的殘餘......未實際使用。編輯。 – 2011-12-22 19:33:34

回答

4

.call調用由第一個參數給出明確的背景下的功能,所以callback.call(msg, count)調用與msg回調函數設置爲上下文(this值的回調函數內該呼叫)和count作爲第一個參數。

所以你可能要callback(msg, count)callback.call(namespace, msg, count);這意味着this回調中會參考namespace該呼叫。

+0

換句話說,'call'接受X + 1參數,其中第一個是函數將運行的命名空間,剩餘的X被傳遞給變量? – 2011-12-22 19:35:01

+0

@ChrisSobolewski那麼如果通過命名空間,你的意思是'this'的值在被調用的函數中,那麼是的,傳遞的參數在任何方式之後開始。 https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call – Esailija 2011-12-22 19:42:36

1

$.ajax()函數有一個上下文參數,您可以將其用於此目的。

$.ajax({ 
    url: "http://www.example.com/"+sub+ ".json?count=" + count, 
    context: "hello", 
    dataType: "json", 
    success: function(msg) 
    { 

    // here 'this' will be the 'hello' you specified for context while making the call. 

    callback.call(msg, count) 
    } 
}) 
相關問題