javascript,$ajax,变量名

问题描述

您可以使用.queue()$.map()以保持范围name。此外,改变status阵列的具有属性的对象status,其中值是一个数组,以防止可能出现的冲突this.statusPerson对象。

请注意,您也可以连接.promise(/* queueName */)在执行任务.then()时,在所有排队的功能queueName,IEG,"status"一直呼吁,queueName.length0

function Person(name, status){

  this.name = name;

  this.status = status;

}



var blob = new Blob(['{"stream":null}'], {type:"application/json"});

var url = URL.createObjectURL(blob);

// change `status` array reference, e.g., to `arr`

var arr = {status:[]};

var array = ["bill","bob","carl","ton"];



$(arr).queue("status", $.map(array, function(curr) {

  return function(next) {

    var name = curr;

    // do asynchronous stuff

    $.ajax({url:url, dataType:"json"})

    .then(function(data) {

       if(data.stream == null){

         var person = new Person(name, "dead");

         console.log(name, person);

         arr.status.push(person);

       }

    })

    .then(next) // call next function in `"status"` queue

  }

}))

.dequeue("status")

.promise("status")

// do stuff when all functions in `"status"` queue have completed,

// `"status"` queue `.length` is `0`

.then(function() {

   // `this` : `arr` as jQuery object

   // `this[0].status`: array containing objects pushed to `arr.status`

   console.log(this[0].status); // $(this).prop("status");

});


<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">

</script>

jsfiddle https://jsfiddle.net/nnayjckc/2/


您也可以使用$.when().apply()$.map(),返回相同的结果

function Person(name, status) {

  this.name = name;

  this.status = status;

}



var blob = new Blob(['{"stream":null}'], {

  type: "application/json"

});

var url = URL.createObjectURL(blob);

// change `status` array reference, e.g., to `arr`

var arr = {

  status: []

};

var array = ["bill", "bob", "carl", "ton"];



$.when.apply($, $.map(array, function(curr) {

  var name = curr;

  return $.ajax({

      url: url,

      dataType: "json"

    })

    .then(function(data) {

      if (data.stream == null) {

        var person = new Person(name, "dead");

        console.log(name, person);

        arr.status.push(person);

      }

    })

}))

.then(function() {

  console.log(arr.status)

});


<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">

</script>

jsfiddle https://jsfiddle.net/nnayjckc/3/

解决方法

我正在尝试遍历数组,并为for循环分配变量。所以像这样:

function Person(name,status){
  this.name = name;
  this.status = status;
}

var status = [];
var array = ["bill","bob","carl","ton"];
function exAjax(function(){
 for(var i = 0; i < array.length; i++){
   var name = array[i];
   console.log(name); =====> this gives the correct name

   $.ajax({
     url: xxxxxxx,success: function(data){
       if(data.stream === null){
         var person = new Person(name,"dead");
         console.log(name); =====> return undefined until the last
         person

         status.push(person);       
       }
     }

   })
   name = "";
 }
})

我遇到的问题是名称没有进入成功功能。我以为js会继续向上查找该变量,如果它在当前作用域中不存在?如果尝试console.log
name,我将无法为name变量定义!示波器大师我在做什么错?

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...