是否可以在jsonp Ajax调用的回调中指定我们的特定上下文?
我发现这样做的唯一方法是指定回调名称但不实现它,以便回调进入带有所需上下文的success方法:
$.ajax({
type: "GET",
url: 'someurl',
dataType: 'jsonp',
jsonpCallback: 'myCallbackName',
context: this,
success: function (response) {
console.log(this); //this must be the context specified earlier
}
});
问题在于即使它正常工作,我也会收到很多错误:
TypeError:myCallbackName不是函数
如何在不造成错误的情况下实现这一目标?
由于
艾蒂安
答案 0 :(得分:2)
这应该可以解决问题:
$.ajax({
type: "GET",
url: 'someurl',
dataType: 'jsonp',
jsonpCallback: 'myCallbackName',
context: this,
success: delegate(this, function (response) {
console.log(this); //this must be the context specified earlier
})
});
var delegate = function(context, func) {
return function() {
return func.apply(context, arguments);
}
}
但是,您得到 TypeError:myCallbackName不是函数,因为您没有定义 myCallbackName 。只需添加
var myCallbackName = function() { }
P.S。 有关JavaScript here中的委派的更多信息。
答案 1 :(得分:0)
可以通过在调用结束时附加.call([context],[arguments]...)
来在JavaScript中设置上下文。比如...
console.log.call(window, this)
该选项可以解决所有Illegal Invocation
错误,并提供各种其他类型的错误,例如.bind()
和.apply()
。
如果您只是想隐式保存较早的this
,那么您的第二个选择就是将其保存到变量中。保存它的好时机就在AJAX调用之前,但要确保它是全局的。我不确定为什么你不只是使用提供的成功函数,因为它将提供数据。
var _this = this;
$.ajax(...);
function myCallbackName() {
console.log(_this);
}