Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $。每个都带有Ajax和变量修改_Javascript_Jquery_Ajax_Closures - Fatal编程技术网

Javascript $。每个都带有Ajax和变量修改

Javascript $。每个都带有Ajax和变量修改,javascript,jquery,ajax,closures,Javascript,Jquery,Ajax,Closures,whereString为什么返回“where”而不是“where”+一些数据。我知道这与闭包和作用域有关,但我不知道如何解决它 提前谢谢你的帮助 代码如下: function SomeFunction() { var whereString = "where "; var seperator = " "; $.when.apply($(".SomeClass").each(function () { var p

whereString为什么返回“where”而不是“where”+一些数据。我知道这与闭包和作用域有关,但我不知道如何解决它

提前谢谢你的帮助

代码如下:

    function SomeFunction() {
        var whereString = "where ";
        var seperator = " ";

        $.when.apply($(".SomeClass").each(function () {

             var promise = SomeAjaxCall().done(function (data) {
                whereString += seperator + data.d

             });
             seperator = "and "

       }).then(function() { 

         alert("Finished");
         alert(whereString); // Alerts "where " and not "Where "+data.d

      })
   };

这是因为警报是在对jquery select的所有结果调用“each”函数之后触发的。但是,SomeAjaxCall()是异步的,因此没有调用“done”函数,因为在“each”函数执行完毕之前,ajax调用没有完成,因此警报会触发

虽然这可能不是您最终想要的,但您可以在发出警报之前添加几秒钟的超时时间,以查看“where”最终是否会得到更新。

注意,
.apply()
希望
将此
上下文设置为第一个参数,将数组设置为第二个参数
.each()
不返回数组,而且
。each()
似乎缺少右括号
at
js
在问题中

尝试将
.map()
替换为
.each()
,使用
.get()
链接到
.map()
以返回jQuery承诺对象数组,设置
上下文
$。何时将
应用到
$
。另外,在
.map()中包含
返回承诺
,以将jQuery承诺对象返回到
.then()


function SomeFunction(){
var whereString=“where”;
var分隔符=”;
//将`this`设置为`jQuery`别名`$`
$.when.apply($,$(“.SomeClass”).map(函数(i,el){
//做异步的事情
var promise=$.Deferred().resolve({
“d”:el.textContent
}).完成(功能(数据){
其中string+=分隔符+数据.d
});
分隔符=“和”;
//返回jQuery承诺
回报承诺
//在“.map()”中包含右括号,使用“.get()”返回
//jQuery承诺对象数组
}).get())。然后(函数(){
控制台日志(“完成”);
console.log(whereString);
})
};
SomeFunction()

abc

def
谢谢,这很有帮助。我是JS的新手,我通过尊重和承诺工作。
function SomeFunction() {
  var whereString = "where ";
  var seperator = " ";
  // set `this` to `jQuery` alias `$`
  $.when.apply($, $(".SomeClass").map(function(i, el) {
    // do ajax stuff
    var promise = SomeAjaxCall().done(function (data) {
                    whereString += seperator + data.d
                  });
    seperator = "and ";
    // return jQuery promise object
    return promise
  // include closing parenthesis to `.map()` , use `.get()` to return
  // array of jQuery promise objects
  }).get()).then(function() {

    alert("Finished");
    alert(whereString); 

  })
};