在jQuery中提供以下Ajax调用:
{
.
.
.
,
getSomeData: function(args, myUrl, foo) {
$.ajax( {
type: "GET",
url: myUrl,
data: args,
async: true,
dataType: 'json',
success: myHandler
});
},
myHandler: function (data, textStatus, oHTTP, foo){ ... }
};
值foo
可以以某种方式附加到传递给success-handler myHandler
的参数中吗?是否有任何方法可以将值传递给GET上的服务器,并使该值在往返中返回到客户端,重新出现在success-handler的参数列表中?我无法更改data
中返回的结构。
答案 0 :(得分:4)
如果您在请求中声明myHandler
,则可以使用closure。
getSomeData: function(args, myUrl, foo) {
$.ajax( {
type: "GET",
url: myUrl,
data: args,
async: true,
dataType: 'json',
success: function (data, textStatus, oHTTP){ ... }
});
},
这样,foo
回调中就可以使用success
。
答案 1 :(得分:1)
如果您在$ .ajax调用是在类中,并且成功回调是通过该类的方法传递的,则它不起作用。
编辑:这是答案。请注意,我将函数ajaxCall定义为类中的方法。我将this.before,this.error和this.success定义为ajaxCall的方法,因为它们可以从superClass调用方法。function main(url){
this.url = url;
this.ajaxCall = function(){
this.before = function(){
//Can call main class methods
};
this.error = function(){
//Can call main class methods
};
this.success = function(data){
//Can call main class methods
};
//This is how you pass class arguments into the success callback
var that = this;
$.ajax({
url: this.url,
type: 'GET',
dataType: 'json',
beforeSend: this.before(),
error: this.error(),
success: function(data){that.succes(data);}
});
//Run internally by calling this.ajaxCall() after it is defined
//this.ajaxCall();
}
//Or externally
var main = new main(SOME_URL);
main.ajaxCall();
答案 2 :(得分:0)
@Unicron的答案正确,但没有给出很好的例子。检查一下:
$( 'tr.onCall' ).on( 'click', function( event ) {
let pEvent = function() { return event; } // like a fly in amber...
$.ajax( {
...
success: function( data ) {
let x = pEvent(); // x now equals the event object of the on("click")
}
});
});
通过在触发on("click")
的匿名函数中声明pEvent函数,事件对象在其原始上下文中被“冻结”(封装)。即使您在ajax成功函数的不同上下文中调用它,它也会保留其原始上下文。
更具体的示例:单击时将打开一个模式对话框(样式为Div),但是当对话框关闭时,我想将焦点返回到首先单击以将其打开的元素。
$( 'tr.onCall' ).on( 'click', function( event ) {
let rTarget = function() { return event.currentTarget; }
$.ajax( {
url: 'ajax_data.php',
...other settings...
success: function( data ) {
modal_dialog(
data,
{
returnTarget: rTarget(),
...other settings...
}
);
}
});
});
成功后,它将调用自定义函数modal_dialog()
(在其他地方定义),并传入包含各种设置的对象。 returnTarget
设置包含被单击元素的HTML ID属性;因此,当我关闭对话框时,我可以运行$(options.returnTarget).focus();
将焦点返回到该元素。