我正在编写一个jQuery
插件,我需要使用$.ajax
请求并使用其他参数处理回调,但我发现很难实现它。
简化版:
$('#element_id').click (function () {
var additional_params = { name:'mike', surname:'buongiorno' };
var ajax_params = {
type: "POST",
url: "some.php",
data:'data here',
complete:getResponse
}
sendAJAX (ajax_params, additional_params);
});
var sendAJAX = function (ajax_params, additional_params) {
$.ajax(ajax_params, additional_params);
}
var getResponse = function (data, additional_params) {
}
是否存在某种方式来执行此类操作以将additional_params
传递给complete
回调函数(在本例中为getResponse
)?
答案 0 :(得分:16)
function callback(stuff){
// use stuff
}
...
var something="something";
$.ajax({
url: "test.html",
complete: function(){
callback(something);
}
});
...
如果您需要其中一个已经通过的参数,您可以将其更改为:
complete: function(jqXHR, textStatus){
callback(jqXHR, textStatus, something);
}
答案 1 :(得分:2)
您可以执行以下操作:
$('#element_id').click (function () {
var additional_params = { name:'mike', surname:'buongiorno' };
var ajax_params = {
type: "POST",
url: "some.php",
data:'data here',
complete:getResponse(additional_params)
}
sendAJAX (ajax_params, additional_params);
});
var getResponse = function(additional_params) {
return function(data) {
//code that uses 'additional_params' (and 'data') can go here
alert(additional_params.name);
};
};
基本上getResponse
已被修改,因此它返回一个函数闭包,其中包含您传入的任何additional_params
。当jQuery调用它时,处理函数可以使用这些参数。
答案 2 :(得分:0)
这是我用来发布JSON数据的代码的片尾,然后使用回调方法处理响应,该方法允许我在' info'中设置一些数据。将以异步方式提供,并作为回调方法的第二个参数传递给回调方法。这样你的回调方法就可以有一些上下文'传递给他们(通过'信息'),它包装了所有'样板'在这种称为“json'”的方法中。关键线当然是它调用回调方法的地方。感谢詹姆斯·蒙塔尼(James Montagne)的帖子,这帮助我想出了这个设计。
json : function(postName, postData, callback, info) {
if (typeof callback !== "function") {
console.log("callback not valid function for postName "
+ postName);
}
// console.log("JSON-POST: " + JSON.stringify(postData));
$.ajax({
url : postTargetUrl + postName,
contentType : "application/json",
type : "post",
dataType : "json",
cache : false,
data : JSON.stringify(postData),
success : function(jqXHR, textStatus) {
// console.log("JSON-RESULT: "+postName+" -> " +
// textStatus);
if (textStatus === "success") {
callback(jqXHR, info);
} else {
console.log("JSON: " + postName + " -> " + textStatus);
}
}
});
}