【问题标题】:pass variable into deferred done将变量传递给延迟完成
【发布时间】:2015-01-27 16:30:31
【问题描述】:

我正在尝试将变量传递给 done 回调,但没有任何运气。

var getDataForCompany = function(company_id) {

    $.ajax({
      type: "post",
      url: url,
      data:{
        company_id: company_id 
      }

    }).done(function(returnedData, textStatus, jqXHR) {

      anotherFn(company_id);
      //need to access company_id here, but it is undefined


    });

};

我尝试将整个 AJAX 请求包装在 IIFE 中以尝试关闭以捕获我的 company_id,但是

var getDataForCompany = function(company_id) {

    ($.ajax({
      type: "post",
      url: url,
      data:{
        company_id: company_id 
      }

    }).done(function(returnedData, textStatus, jqXHR) {

      anotherFn(company_id);
      //need to access company_id here, but it is undefined


    })(company_id);

};

也无法正常工作。这不是正确的方法吗?

【问题讨论】:

  • 也许company_id 未定义?因为第一个例子应该可以工作......你怎么称呼getDataForCompany?
  • 在 ajax 调用之前尝试一个简单的console.log(company_id) 看看是否。
  • 顺便说一句,你在哪里定义 url?
  • @FrancescoE。是的,我只是记下了一些伪代码。 url 已定义。
  • @Alexander 完全正确。答案是在普通网站。非常感谢。

标签: javascript jquery ajax jquery-deferred


【解决方案1】:

如 cmets 中所述,匿名 done 函数应该具有对通过 getDataForCompany 调用传入的 company_id 的引用。它可能只是在传入时未定义。下面的代码类似于您的 ajax 调用的闭包设置。如果您运行该方法,您将看到 company_id 将被记录。

var getDataForCompany = function(company_id) {

    var done  = function() {
        console.log(company_id)
    }

    done();
};





getDataForCompany("ID")
>>"ID"
getDataForCompany()
>>undefined

【讨论】:

    【解决方案2】:

    试试

    var getDataForCompany = function(company_id) {
        return $.ajax({
          type: "POST",
          url: url,
          data:{
            company_id: company_id
          }
        })
        .done(function(returnedData, textStatus, jqXHR) {
          var company_id = this.url.split(/company_id=/)[1];
          console.log(company_id);
          return anotherFn(company_id);
          //need to access company_id here, but it is undefined
        });
    };
    

    var anotherFn = function(company_id) {
      return $.ajax({
          type: "GET",
          url: "https://gist.githubusercontent.com/guest271314/23e61e522a14d45a35e1/raw/62775b7420f8df6b3d83244270d26495e40a1e9d/ticker.json",
          data:{
            company_id: JSON.stringify(company_id)
          },
          dataType: "json"
        }).done(function(data) {
           console.log(this.url.split(/company_id=/)[1])
        })
      };
    
    var getDataForCompany = function(company_id) {
    
        return $.ajax({
          type: "GET",
          url: "https://gist.githubusercontent.com/guest271314/23e61e522a14d45a35e1/raw/62775b7420f8df6b3d83244270d26495e40a1e9d/ticker.json",
          data:{
            company_id: company_id
          },
          dataType: "json"
        }).done(function(returnedData, textStatus, jqXHR) {
          var company_id = this.url.split(/company_id=/)[1];
          console.log(company_id);
          return anotherFn(parseInt(company_id) + 1);
          //need to access company_id here, but it is undefined
    
    
        });
    
    };
    
      getDataForCompany(1);
      
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      • 2012-08-09
      • 2011-08-03
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      相关资源
      最近更新 更多