javascript,$。ajax,变量名
您可以使用.queue(),$.map()以保持范围name。此外,改变status阵列的具有属性的对象status,其中值是一个数组,以防止可能出现的冲突this.status的Person对象。
请注意,您也可以连接.promise(/* queueName*/)在执行任务.then()时,在所有排队的功能queueName,IEG,'status'一直呼吁,queueName.length是0。
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.logname,我将无法为name变量定义!示波器大师我在做什么错?
相关文章:
1. javascript - 请问一下react-native 布局的时候,尺寸的大小是如何确定的呢?2. javascript - 实参和形参有哪些通俗的命名吗?尤其形参3. javascript - jQuery中live事件在移动微信端下没有效果;代码如下4. javascript - 小白求解:mac 下如何设置nodejs express的 NODE_NEV 环境变量5. javascript - avalon.js ms-on 事件绑定无效 ?6. javascript - js 修改表格元素的,可以用DOM操作实现吗?7. javascript - mock.js可以存储数据吗8. javascript - fis3 构建 模块加载调用问题,index.js不能加载模块zepto.js,也没有错误报警,9. javascript - 在html中写了个<video>视频,浏览器却是一片空白为什么呢?360浏览器?10. javascript - 我写的href跳转地址不是百度,为什么在有的机型上跳转到百度了,有的机型跳转正确