2011-12-22 76 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) 
    } 
}) 
相关问题