Javascript 如何将值传递给jQuery Ajax成功处理程序
在jQuery中进行以下Ajax调用:Javascript 如何将值传递给jQuery Ajax成功处理程序,javascript,jquery,ajax,Javascript,Jquery,Ajax,在jQuery中进行以下Ajax调用: { . . . , getSomeData: function(args, myUrl, foo) { $.ajax( { type: "GET", url: myUrl, data: args, async: true, dataType: 'json', success: myHandler
{
.
.
.
,
getSomeData: function(args, myUrl, foo) {
$.ajax( {
type: "GET",
url: myUrl,
data: args,
async: true,
dataType: 'json',
success: myHandler
});
},
myHandler: function (data, textStatus, oHTTP, foo){ ... }
};
value
foo
是否可以以某种方式附加到传递给success handlermyHandler
的参数中?有没有办法在GET上向上传递一个值,并让该值在往返过程中返回给客户机,并重新出现在成功处理程序的参数列表中?我无法更改数据中返回内容的结构 如果在请求中声明myHandler
,则可以使用
这样,foo
将在success
回调中对您可用。如果您是$。ajax调用在一个类中,并且成功回调被传递给该类的一个方法,则它不起作用
编辑:这是答案。注意,我将函数ajaxCall定义为类中的方法。我将this.before、this.error和this.success定义为ajaxCall的方法,因为它们可以从超类调用方法
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();
@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")
}
});
});
通过在(“单击”)
时触发的匿名函数中声明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()
将焦点返回到该元素
$( '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...
}
);
}
});
});