0

再会。我给不同的数组有问题;

接下来是我的代码:

setInterval(function() {

var TestName = [];
var requests = [];
TestName.push('0');
for($i=1; $i<8; $i++) {
    var id = $i;
    requests.push($.post("./Scripts/", {
    record:id,
    opt:'get_test'
    }, function(data){
          TestName.push(data);
    }));
}

 $.when.apply($,requests).done(function(){

     for($i=1; $i<8; $i++) {
$('#test'+$i).html('').html(TestName[$i]);

}
alert(TestName);
 });

}, 15000);

这段代码有效,但每次我得到不同的数组时......

例如:

alert(TestName); 结果一:

0,
<a href="#"><img src="./images/test1.png"></a>,
<a href="#"><img src="./images/test2.png"></a>,
<a href="#"><img src="./images/test3.png"></a>,
<a href="#"><img src="./images/test4.png"></a>,
<a href="#"><img src="./images/test5.png"></a>,
<a href="TestTestTestTestTest.php"><img src="./1358997710.jpg"></a>,
<a href="#"><img src="./images/test7.png"></a>,

alert(TestName); 结果二:

0,
<a href="#"><img src="./images/test1.png"></a>,
<a href="#"><img src="./images/test2.png"></a>,
<a href="TestTestTestTestTest.php"><img src="./1358997710.jpg"></a>,
<a href="#"><img src="./images/test3.png"></a>,
<a href="#"><img src="./images/test5.png"></a>,
<a href="#"><img src="./images/test4.png"></a>,
<a href="#"><img src="./images/test7.png"></a>

如您所见,每次交换席位时数组的元素,有时数组的元素排列顺序错误。

请告诉我代码中的错误可能在哪里?

4

1 回答 1

1

您的数组每次都不同的原因是您正在运行异步请求,然后从回调中填充。每次执行此操作时,您的请求恰好以不同的顺序完成,因此以不同的顺序填充数组。

您不能依赖在执行过程中的任何特定点调用异步请求回调,它们可以随时调用,具体取决于响应决定何时返回。

于 2013-01-29T11:55:01.557 回答