.each()中的xmlhttp.send()仅发送最后一条记录

时间:2014-07-25 13:22:29

标签: jquery ajax each xmlhttprequest

我正在尝试为一个宠物启动项目教自己一些PHP和Ajax - 没有招聘一个真正的技术人员。 :-) 无论如何,这是背景。 我在HTML表中选择了一个数据,当提交时将其调用为更新函数。 我循环遍历表以选择所选记录(单选按钮)并将它们分配给$ row并循环遍历每个元素以调用更新php文件并发送记录以添加到数据库中。 当我有javascript警告语句时,所有记录都会添加到数据库中。但是如果我注释掉警报,那么只会添加最后一条记录。 我尝试在循环中添加3秒,5秒延迟仍无用。

这里是代码片段 - 一些变量在此循环之外设置,并且值没有问题。


$row.each(function() {

var $rowcells = $(this).find('td'); //entire row split into columns var name = $rowcells.eq(0).text(); //name of the person selected relationtype = $rowcells.eq(1).children().val(); // relationship with the person //alert("I was here with "+name); // all records get added when this alert is uncommented xmlhttp.open("POST","profileupdate.php",true); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.send("type="+type+"&userid="+userid+"&userrelid="+userrelid+"&relationtype="+relationtype+"&timeline="+timeidtext); });

我知道一次添加一个这样的数据库性能会很昂贵。无论如何我应该改变这种逻辑。但是,在此期间,我们很想知道这里发生了什么.n

1 个答案:

答案 0 :(得分:1)

您正在异步地向服务器发送HTTP请求(xmlhttp.open的' true'第二个参数)。这意味着该行中的下一个项目将覆盖前一个项目。

您可以尝试:

  • 使用多个xmlhttp对象(每个元素对应一个元素)
  • 使用' false'作为第二个参数
  • 仅处理上一个元素完成后的下一个元素(在' onreadystatechange'处理程序中)

在第三种情况下,您无法使用'每个'迭代器。

更多信息:http://www.w3schools.com/ajax/ajax_xmlhttprequest_send.asp