“get_ing_id”获取一个字符串,查找数据库并根据字符串检索相关的id数据。在这个例子中,它需要检索'65'和'66',它在执行代码时成功执行。
var ings = [];
var ingsSearch = [];
var i = 2;
var k = 0;
ings[0] = 'apple';
ings[1] = 'banana';
function next(){
for(j=0;j<i;j++){
if(ings[j] != 0){
$.ajax({
url: burl+'index.php/ajax/get_ing_id',
type: 'POST',
data: 'name='+ings[j],
success: function(data){
ingsSearch[k] = data;
alert(ingsSearch[k]);
k++;
alert(k);
}
});
}
}
alert(ingsSearch[0]);
alert(ingsSearch[1]);
}
执行代码时,我按顺序获取警告框:
它应该是这样的
那我在哪里做错了?我对javascript不是很有经验,如果我得到任何帮助,我将不胜感激。谢谢你的时间!
答案 0 :(得分:2)
尝试将async
对象的ajax
属性设置为false
。默认值为true
,因此无法保证呼叫将按顺序完成:
$.ajax({
async: false,
// ..
});
async
property 请注意ShankarSangoli的评论;编码的理想方法不是基于循环,而是从AJAX回调函数进入下一个元素。
答案 1 :(得分:1)
你必须明白,默认情况下,AJAX是异步的 - 只要服务器响应就调用成功函数,这很可能发生在调用两个alert
语句之后;因此,当您尝试输出时,lngsSearch[0]
lngsSearch[1]
实际上尚未设置。