【问题标题】:Passing additional parameters to $.ajax complete callback function将附加参数传递给 $.ajax 完成回调函数
【发布时间】:2011-09-20 20:11:44
【问题描述】:

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

【问题讨论】:

    标签: jquery parameter-passing


    【解决方案1】:

    这是我用来发布 JSON 数据的代码的过去,然后使用回调方法处理响应,该方法允许我在“信息”中设置一些异步可用的数据,并作为第二个传递给回调方法回调方法的参数。这样,您的回调方法可以将一些“上下文”传递给它们(通过“信息”),并将所有“样板”包装在这个名为“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);
                    }
                }
            });
        }
    

    【讨论】:

      【解决方案2】:
      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 这是最简单的解决方案。 (尤其是第二个代码部分,每个人都只需要 data... 而忘记 jqXHR )。那为什么我会看到闭包解决方案?
      【解决方案3】:

      你可以这样做:

      $('#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 调用处理函数时,参数将可用于处理函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-09
        • 2012-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多