我一直试图弄清楚如何通过以下代码进行迭代。
var arr = []
$。AJAX({
type: 'POST', dataType: 'html', url: '/test/public/index/getid', success: function(response) { response = $.parseJSON(response) $.each(response, function(index, value) { arr.push(value) }); }
});
的console.log(ARR)
$。each(arr,function(index0,value0){
console.log(' INDEX0:' + value0);
});
这会给我一个我可以扩展的firebug上的[]。它有0和1,并显示ids
[]
0 1234343
1 2343223
2 414234
3 232342
但是稍后在程序中我尝试用$ .each循环它并且它不会读它。
我正在尝试通过console.log打印时看起来像这样。
[" 1234343"," 2343223"," 414234"," 232342"]
里面的值是在第一个循环上推送的id。
有关如何做到这一点的任何想法?试图获得arr.length并将其用作测试条件。
RAW JSON响应: [" 1234343"," 2343223"," 414234"," 232342"]
答案 0 :(得分:2)
Ajax是异步的,不要尝试从它的成功回调之外的ajax请求中访问数据。
$.ajax({
type: 'POST',
dataType: 'json',
url: '/test/public/index/getid',
success: function(arr) {
console.log(arr);
}
});
你也可以这样做:
var request = $.ajax({
type: 'POST',
dataType: 'json',
url: '/test/public/index/getid'
});
request.done(function(arr){
console.log(arr);
});
第二种方式允许您传递request
并在任何需要的地方使用它,只需执行此操作:
request.done(function(arr){
// do something with arr
console.log(arr)
});
更新评论,
如果请求2取决于请求1,请使用以下结构:
var request1 = $.ajax({...});
request1.done(function(){
var request2 = $.ajax({...});
request2.done(function(){
// both are done, do stuff
});
});
或者如果你想发送请求1和2,然后在两者完成后再做一些事情,你可以这样做:
var request1 = $.ajax({...});
var request2 = $.ajax({...});
$.when(request1,request2).done(function(req1,req2) {
// do stuff
});
答案 1 :(得分:1)
var arr = []
var callback = function(arr){
console.log(arr);
};
$.ajax({
type: 'POST',
dataType: 'html',
url: '/test/public/index/getid',
success: function(response) {
response = $.parseJSON(response)
$.each(response, function(index, value) {
arr.push(value)
});
callback(arr);
}
});
为什么不做这样的事情?
您执行主程序。
第二步是异步过程,主程序执行不会停止进行ajax调用,无论ajax调用是否完成,它都将继续执行并完成执行。因此,在执行console.log(arr)
时,您的ajax调用可能/可能不会返回,留下一个空arr
变量以记录到控制台。这可能就是你没有看到任何东西的原因,因为记录了一个空数组。
使用回调函数,只有在ajax调用返回并且填充了arr
时,才能确保将arr
记录到控制台。