【问题标题】:How do I pass a variable to a ajax success function as it was at the time of the ajax call?如何在 ajax 调用时将变量传递给 ajax 成功函数?
【发布时间】:2013-01-13 16:42:39
【问题描述】:

这是我的 ajax 调用(几乎是标准的 jQuery,但使用的是 couchdb jquery 库,http://daleharvey.github.com/jquery.couch.js/):

var stuff = "some stuff";
$.couch.db("test_db").create({
    success: enyo.bind(this, function (data) {
        console.log(stuff);
    })
});
stuff = "a change in stuff";

我希望 console.log 的输出是“一些东西”而不是“东西的变化”。

执行此操作的方法越多越好,因为我认为某些方法可能需要我不使用“enyo.bind”(http://enyojs.com/),但也许我可以用这些方法完成同样的事情。

【问题讨论】:

    标签: jquery ajax variables scope


    【解决方案1】:

    你可以为它使用一个函数。

    var create = function (stuff) {
      $.couch.db("test_db").create({
        success: enyo.bind(this, function (data) {
          console.log(stuff);
        })
      });
    };
    
    create(stuff);
    

    或者,它相当于一个匿名函数。

    !function(stuff) {
      $.couch.db("test_db").create({
        success: enyo.bind(this, function (data) {
          console.log(stuff);
        })
      });
    }(stuff);
    

    What does the exclamation mark do before the function?

    【讨论】:

      【解决方案2】:

      您可以通过这样做“锚定”一个变量:

      (function(varname) {
          // code that relies on varname
      })(varname);
      

      【讨论】:

        【解决方案3】:
        var stuff = "some stuff";
        var callback = (function(stuff){ 
            return function(data){ console.log( stuff ) }; 
        }(stuff));
        
        $.couch.db("test_db").create({
            success: enyo.bind(this,  callback );
        });
        stuff = "a change in stuff";
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-03
          • 2014-01-25
          • 2021-02-19
          • 1970-01-01
          相关资源
          最近更新 更多