使用for循环时,Ajax响应的顺序不正确,div中没有​​显示任何内容

时间:2016-05-09 13:45:29

标签: jquery ajax for-loop

我在 for 循环中调用 ajax if ((Input.touchCount > 0) && (Input.GetTouch(0).phase == TouchPhase.Began)) { GetComponent<Rigidbody2D>().velocity = Vector2.zero; GetComponent<Rigidbody2D>().AddForce(jumpForce); } 正在获取,但顺序不正确。

我必须在第一个div中显示第一个响应,在第二个div中显示第二个响应等等。但是没有显示任何内容。但是我提醒数据(响应),它是正确的但是没有正确的顺序。

我的代码是:

ajax response

我听说我可以设置时间延迟,如何以及在哪里?

请帮我找到解决方案。

4 个答案:

答案 0 :(得分:1)

默认情况下,ajax请求是异步的。这就是为什么你得到不同顺序的回应。

您可以将ajax更改为同步(不推荐),也可以在一个请求中获取整个数据并循环响应。

这将是同步请求的设置:

   $.ajax({
        type: "POST",
        url: remote_url,
        data: postData,
        async: false,
        success : function(data) {
            remote = data;
        }
    });

答案 1 :(得分:0)

使用async:false

$.ajax({
url:'yoururl',
type:'post',
data:{a:a,b:b},
async:false
})

答案 2 :(得分:0)

您是否尝试在循环中使用递归?此解决方案允许您在启动新请求之前等待响应,因此最终订单应该是正确的。

loadanswer();

function loadanswer(nos, h) {

        if (typeof nos === typeof undefined) {
            nos = $('#nos').val();
            h = 0;
        }

        var lang = $("#hdn_lan_"+h).val();
        var filename = $("#hdn_lanfile_"+h).val();
        var pv = $("#hdn_pv_"+h).val();
        $.post("ajaxCoderun.php", {filename:filename,lang:lang,pv:pv},function(data){
            alert(data);
            $("#ca_"+h).html("<span style='color:green;'>Correct Answer is: <b>"+data+"</b></span>");
            if (h < nos) {
                 loadanswer(nos, h++);
            }

        });
    }
    }

答案 3 :(得分:0)

终于得到了解决方案:

我将新参数h传递给ajax页面,其中hfor循环变量。在 ajaxCoderun.php 页面中,我将新变量与结果一起追加。它看起来像:

$num = $_POST['num'];

echo $result."^".$num;

在jquery页面中,我分割数据并将结果设置在相应的div中。

现在我的代码看起来像这样:

function loadanswer(){
    var nos = $("#nos").val();
    var res = "";
    for(var h=0;h<nos;h++){

        var lang = $("#hdn_lan_"+h).val();
        var filename = $("#hdn_lanfile_"+h).val();
        var pv = $("#hdn_pv_"+h).val();
        //alert(lang+" & "+ filename +" & "+pv);
        $.post("ajaxCoderun.php", {filename:filename,lang:lang,pv:pv,num:h},function(data){
            //alert(data);
            var dataArray = data.split("^");
            $("#ca_"+dataArray[1]).html("<span style='color:green;'>Correct Answer is: <b>"+dataArray[0]+"</b></span>");

        });
    }
    }
    loadanswer();