$ .Ajax循环中的意外行为

时间:2014-03-19 12:30:50

标签: jquery ajax dom

我正在运行代码

<div id="#1gr1">Kun</div>


 for(var i=1;i<=10;i++){
  $.ajax({
                type: "POST",
                url: "get_url.php",
                async: false,
                data: {a: 'hi'}
            }).done(function(msg) {

               //   getting msg[1]='Good';

                if (msg !== '') {
                    $('#1gr' + i).html(msg[1]);

                }                 

                msg='';

            });

  }

暂时将#1gr1 的html更改为&#34; Good&#34;

<div id="#1gr1">Good</div>

但在下次通话时i = 2;它正在将#1gr1 的文字改为&#34; KUN&#34; 。  这次改变了#1gr2

的html
  <div id="#1gr1">Kun</div>
  <div id="#1gr2">Good</div>

主要问题:为什么div的文本会自动更改回原始文本,i的值正是我想要的。

任何猜猜......?

2 个答案:

答案 0 :(得分:2)

只需清除您的代码即可从ID dom中删除#

<div id="#1gr1">Kun</div>

<div id="1gr1">Kun</div>

答案 1 :(得分:0)

您似乎无法正确理解AJAX - 异步 Javascript和XML。

因此,在您的代码中,for循环正常执行。

.done()仅在ajax请求完成后才会被调用。

此外,在$.ajax

时,您无法保证执行顺序

让我们看看下面的例子:

$.ajax({
url:'/some/resource.xml'
});
$.ajax({
url:'/some/json'
});

在上述情况下,您无法保证resource.xml将首先完成。 此外,您无法保证json永远是第二位。

在每种情况下,无论哪种反应快速且轻量级,都将成为赢家。

因此,总而言之,循环不会以意外行为运行。

此外,您正在使用以#开头的ID,这会混淆jquery。