for循环中的JQuery ajax函数表现得很奇怪

时间:2012-02-10 21:40:02

标签: php javascript jquery ajax codeigniter

“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]);

    }

执行代码时,我按顺序获取警告框:

  • 66
  • 1
  • 65
  • 2
  • 未定义
  • 未定义

它应该是这样的

  • 66
  • 1
  • 65
  • 2
  • 66
  • 65

那我在哪里做错了?我对javascript不是很有经验,如果我得到任何帮助,我将不胜感激。谢谢你的时间!

2 个答案:

答案 0 :(得分:2)

尝试将async对象的ajax属性设置为false。默认值为true,因此无法保证呼叫将按顺序完成:

$.ajax({
    async: false,
    // ..
});

请注意ShankarSangoli的评论;编码的理想方法不是基于循环,而是从AJAX回调函数进入下一个元素。

答案 1 :(得分:1)

你必须明白,默认情况下,AJAX是异步的 - 只要服务器响应就调用成功函数,这很可能发生在调用两个alert语句之后;因此,当您尝试输出时,lngsSearch[0] lngsSearch[1]实际上尚未设置。