【问题标题】:getting ajax to update corresponding div in mySQL row results让ajax更新mySQL行结果中的相应div
【发布时间】:2011-07-23 05:23:15
【问题描述】:

我有这个 AJAX 代码:

<script type="text/javascript">
function updateAssigned(assigned , ticketid)
{
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
 if (xmlhttp.readyState==4 && xmlhttp.status==200)
 {
document.getElementByID('origassigned').innerHTML=xmlhttp.responseText;
 }
} 
xmlhttp.open("GET","ajax_php/assigned.php?assigned=" + assigned + "&ticketid=" + ticketid,true);
xmlhttp.send();
}
</script>

还有这个 HTML

<DIV CLASS="assigned">
  <DIV ID="origassigned"></DIV>
  <SELECT onChange="updateAssigned(this.value , {$row['ticket']})">
       <option>OPTION 1</option>
       <option>OPTION 2</option>
  </SELECT>
</DIV>

<DIV CLASS="assigned">
  <DIV ID="origassigned"></DIV>
  <SELECT onChange="updateAssigned(this.value , {$row['ticket']})">
       <option>OPTION 1</option>
       <option>OPTION 2</option>
  </SELECT>
</DIV>

<DIV CLASS="assigned">
  <DIV ID="origassigned"></DIV>
  <SELECT onChange="updateAssigned(this.value , {$row['ticket']})">
       <option>OPTION 1</option>
       <option>OPTION 2</option>
  </SELECT>
</DIV>

我无法让 AJAX 更新相应的 DIV。它可以完美地更新我的数据库,但即使我正在更新第二个 DIV,也只会更改名为“已分配”的第一个 DIV。

任何想法我应该将我的 AJAX 代码更改为以便识别要更新的 DIV 吗?谢谢!

更新:将 div 更改为不具有相同的 ID 以更符合 Web 标准。仍然不知道如何告诉 AJAX 更新哪个 div。
旁注:这些是从 mySQL 查询结果生成的。每个分组是不同的行。但它们都来自同一个模板。因此,每个组的名称 CLASS 和 ID 必须相同。

<DIV CLASS="assigned">
<DIV CLASS="origassigned" NAME="origassigned"></DIV>
<SELECT onChange="updateAssigned(this.value , {$row['ticket']})">
   <option>OPTION 1</option>
   <option>OPTION 2</option>
</SELECT>
</DIV>

<DIV CLASS="assigned">
<DIV CLASS="origassigned" NAME="origassigned"></DIV>
<SELECT onChange="updateAssigned(this.value , {$row['ticket']})">
   <option>OPTION 1</option>
   <option>OPTION 2</option>
</SELECT>
</DIV>

<DIV CLASS="assigned">
<DIV CLASS="origassigned" NAME="origassigned"></DIV>
<SELECT onChange="updateAssigned(this.value , {$row['ticket']})">
   <option>OPTION 1</option>
   <option>OPTION 2</option>
</SELECT>
</DIV>

【问题讨论】:

  • 你能显示实际的 HTML,而不是生成 html 的 php 吗?
  • 哪一部分?我在这里展示的唯一 php 是返回 mySQL 查询结果时生成的 ticketid。
  • 那么,结果 html 中的 $row['ticket'] 值是什么?
  • 同样,选择对象没有 .value 属性。要获取选中的值,需要使用this.options[this.selectedIndex].value
  • 实际上 .value 正在工作。我的数据库正在按照我的喜好更新所有数据。我只能在刷新页面之前查看结果..(这就是为什么我尝试使用 AJAX 来更新适当的 DIV 以便我不必刷新页面)

标签: php mysql ajax


【解决方案1】:

你的 HTML 是错误的..

一个页面应该有 unique ID,并且您为每个 div 分配相似的 id origassigned,因为它总是使用ID=origassigned 捕获第一个 div 并一次又一次地更新该 div.. 而不是使用类.. 或为每个 div 分配不同的 id..

谢谢

【讨论】:

  • 我的问题是,DIV "assigned" 和 DIV "origassigned" 是从 mySQL 查询结果生成的。这些组中的每一个都返回行结果。我不能给他们唯一的 ID 名称。即使我要将它们更改为类.. 没有 getElementByClass 属性,那么我将如何选择 DIV?
  • 在页面上分配相同的 id 实际上是错误的。但如果这是您的限制,那么可以分配name 属性并通过getElementsByName 获取数据。记住有一个s 在功能
  • 这是个好主意,我会试试的。这将使我达到标准,但我仍然不知道如何告诉 AJAX 更新哪个 DIV。因为他们的名字都是一样的。
【解决方案2】:

您需要为三个选择设置单独的名称和 ID。这样,您的 ajax 代码就可以处理正在更新的元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-16
    • 2023-03-03
    • 2011-04-28
    • 2014-04-25
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多