1

我有一段代码调用 $.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 读取文件名“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 代码似乎是应该在任何地方运行的独立代码。

有谁知道我在这里打什么。它似乎与处于每个循环中有关。

谢谢

4

1 回答 1

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。

于 2013-08-17T05:19:04.373 回答