如何停止发帖查询

时间:2013-08-15 20:04:29

标签: php jquery

我在JQuery和php上写了一些例子。 Jquery插入了帖子查询。因此,页面必须查看9行。关于JQuery + HTML的代码:

<script type="text/javascript">

$(document).ready(function(){
$.post("test.php", {'test': "test"},
function (result) {
    for (var i = 0; i < result; i++) {
         $.post("test.php", {'test': "test2"},
            function (result2) {
                for (var j = 0; j < result2; j++) {
                    $("#test").append("<p>i="+i+" , j= "+j+" </p>");                    
                }
            }
         );
      }
  }
 );
});

</script>
<div id="test"></div>

test.php有下一个代码:

<?php
$id=$_POST["test"];
echo '3';
?>

我有下一个结果:

i=3 , j= 0
i=3 , j= 1
i=3 , j= 2
i=3 , j= 0
i=3 , j= 1
i=3 , j= 2
i=3 , j= 0
i=3 , j= 1
i=3 , j= 2 

为什么i = 3?这怎么解决?我需要这样:

i=0 , j= 0
i=0 , j= 1
i=0 , j= 2
i=1 , j= 0
i=1 , j= 1
i=1 , j= 2
i=2 , j= 0
i=2 , j= 1
i=2 , j= 2

2 个答案:

答案 0 :(得分:4)

请记住,AJAX调用是异步的。您正在使用i循环来触发这些请求,但javascript代码几乎可以保证比ajax请求运行/完成更快(这只是一个普通的http请求,请记住)可以转到服务器然后回来当他们返回时,您的i循环已完成,i将在循环中分配最后一个值。在你的情况下恰好是3。

如果您在更长的循环中执行此操作,那么在i循环仍在执行时可能会运气并且有一些响应返回,在这种情况下,您可能会看到输出的某些值出现在某处。

要回答您的实际问题,您需要发送i以及其余的ajax请求,这样您就可以确定从哪个请求获得答案。请记住,每个.post()调用都将是一个单独的HTTP请求,并且无法保证您将以最初请求它们的相同顺序获得答案。有些请求可能会受到net.lag的攻击,或者采取不同的路由并在以后的请求之后返回,因此请将代码更改为:

     $.post("test.php", {'test': "test2", i: i},

然后将i与答案一起返回:

<?php
   $test = $_POST['test'];
   $i = $_POST['i'];
   echo "$i 3";

答案 1 :(得分:0)

正如Marc B所指出的,AJAX调用是异步的。如果你想通过使用jQuery的ajax() async 选项来禁用此行为(尽管在POST中传递i值的解决方案可能更好)

$.ajax({
    type: "POST",
    url: "test.php", 
    async: false,
    data: {test: "test"}
}).done( function (result) {
    for (var i = 0; i < result; i++) {
         $.ajax({
             type: "POST",
             url: "test.php",
             async: false,
             data: {test: "test2"}
         }).done(function (result2) {
             for (var j = 0; j < result2; j++) {
                 $("#test").append("<p>i="+i+" , j= "+j+" </p>");                    
             }
         });
     }
});