我有一段调用$ .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代码是一段独立的代码,应该可以在任何地方运行。
有谁知道我在这里打架。它似乎与每个循环有关。
由于
答案 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。