将附加参数传递给$ .ajax完成回调函数

时间:2011-06-23 00:19:15

标签: jquery parameter-passing

我正在编写一个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)?

3 个答案:

答案 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);
                }
            }
        });
    }