$ .post不在代码中的某些位置执行

时间:2013-08-17 01:05:00

标签: jquery ajax

我有一段调用$ .post:

的代码片段
   1. console.log("at .post");
   2.  $.post('loadData.php',{fileName : 'box1.xml'}, function(xml) {
   3.                           $('#Status2').append(xml);
   4.                       debugger;
   5.                         }  
   6.       );
服务器上的

loadData.php读取fileName,'box1.xml'并将内容作为数据'xml'返回。 xml被附加到状态区域,因此我可以看到数据和loadData.php所产生的任何抱怨。眼见 #Status2中的这个告诉我调用已执行。

我可以在我的代码中的许多地方粘贴1-6行并且它工作正常,但是当它放在下面的每个循环中时它不会运行:

$("#canvas .active[target]").each(function() {
    /******************** TEST   Doesn't work here*****************/
        console.log("at .post");
        $.post('loadData.php',{fileName : 'box1.xml'}, function(xml) {
                       $('#galleryStatus2').append(xml);
                       debugger;
                }  
                 );
       /***************************************/

.post片段代码与jQuery在这里寻找的东西无关。 .post代码是一段独立的代码,应该可以在任何地方运行。

有谁知道我在这里打架。它似乎与每个循环有关。

由于

1 个答案:

答案 0 :(得分:1)

$ .post是异步的,如评论中所述,但即便如此,你也会多次调用$ .post到您的服务器而不更改它的任何参数。

这意味着您正在将多个重复的ajax请求排队到您的服务器,这可能会根据处理时间返回不同的响应。在某些情况下,这将导致无法解释的结果。

简化您可以执行的当前代码

$.post('loadData.php',{fileName : 'box1.xml'}, function(xml) {
        for(var i = 0; i < $("#canvas .active[target]").length; i++){
            $('#galleryStatus2').append(xml);
            debugger;
        }
    }  
);

这将调用php脚本一次,然后使用xml将$('#galleryStatus2')填充为$(“#canvas .active [target]”)元素的次数。为什么你想要这样做我不确定,但这是一种更清洁的方式来做你的代码已经存在的东西。

如果您尝试将有关元素$(“#canvas .active [target]”)的信息传递给php脚本,您可以执行类似

的操作
var ids = []
$("#canvas .active[target]").each(function(){
    ids.push($(this).prop('id'));
});

$.post('loadData.php',{fileName : 'box1.xml', ids: ids}, function(xml) {
        $('#galleryStatus2').append(xml);
        debugger;
    }  
);

然后让你的php脚本处理批量的id而不是一次1个并返回整个集合的xml。