将回调和其他参数传递给jQuery ajax成功?
我写了一个函数,我允许回调传递给。然后我想用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 == 25
和count == 'undefined'
。我在为什么亏损?
.call
调用由第一个参数给出明确的背景下的功能,所以callback.call(msg, count)
调用与msg
回调函数设置为上下文(this
值的回调函数内该呼叫)和count
作为第一个参数。
所以你可能要callback(msg, count)
或callback.call(namespace, msg, count);
这意味着this
回调中会参考namespace
该呼叫。
换句话说,'call'接受X + 1参数,其中第一个是函数将运行的命名空间,剩余的X被传递给变量? – 2011-12-22 19:35:01
@ChrisSobolewski那么如果通过命名空间,你的意思是'this'的值在被调用的函数中,那么是的,传递的参数在任何方式之后开始。 https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call – Esailija 2011-12-22 19:42:36
$.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)
}
})
'mynamespace.fetch($(this).attr('href'),25,true,another namespace.createPost);'。什么是'真实'的? – 2011-12-22 19:31:54
我复制并粘贴的旧代码的残余......未实际使用。编辑。 – 2011-12-22 19:33:34