根据此链接xmlhttp.responseText not display text。关于找到div id以显示更新状态,我有另一个问题。我有数百个div id =“result”正在等待响应代码采取行动:成功||错误。现在问题是当我更新任何字段时。它只是第一个div id =“结果”是变化。那么如何从php中获取id并将其显示在自己的状态?
<script type="text/javascript">
//auto update
function updateField(nameValue){
var xmlHttp=null;
try{
xmlHttp=new XMLHttpRequest();
}
catch (e){
try{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e){
alert("No AJAX!");
return false;
}
}
xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState==4){
if (xmlHttp.status==200){
//this will be called after update
var responseText = xmlHttp.responseText;
doSomethingAfterUpdate(responseText);
}
}
}
//this will send the data to server to be updated
xmlHttp.open("GET", 'inc/room_rate_updatez.php?'+ nameValue, true);//return "x" or "y"
xmlHttp.send(null);
}
function doSomethingAfterUpdate(retValFromPHP){
if (retValFromPHP == "x"){
document.getElementById("result").innerHTML = "<img src=\"../images/ico_no.png\" alt=\"X\"/>";
document.getElementById("result").className="error"
}else{
document.getElementById("result").innerHTML = "<img src=\"../images/ico_yes.png\" alt=\"Y\" />";
document.getElementById("result").className="success"
}
}
</script>
这是HTML:
<table border="1">
<tr id="zebra">
<td>01 Nov 2012</td>
<td id="rate"><div id="result"></div> <input type="text" name="rate|498|6400-5200-4600-5600-4100|0" id="498" value="6400" size="10" onchange="updateField(this.name + '=' + this.value);"/></td>
<td id="rate"><div id="result"></div> <input type="text" name="rate|498|6400-5200-4600-5600-4100|1" id="498" value="5200" size="10" onchange="updateField(this.name + '=' + this.value);"/></td>
<td id="rate"><div id="result"></div> <input type="text" name="rate|498|6400-5200-4600-5600-4100|2" id="498" value="4600" size="10" onchange="updateField(this.name + '=' + this.value);"/></td>
<td id="rate"><div id="result"></div> <input type="text" name="rate|498|6400-5200-4600-5600-4100|3" id="498" value="5600" size="10" onchange="updateField(this.name + '=' + this.value);"/></td>
<td id="rate"><div id="result"></div> <input type="text" name="rate|498|6400-5200-4600-5600-4100|4" id="498" value="4100" size="10" onchange="updateField(this.name + '=' + this.value);"/></td>
</tr>
<tr id="zebra">
<td>02 Nov 2012</td>
<td id="rate"><div id="result"></div> <input type="text" name="rate|499|6200-5200-4600-5600-4100|0" id="499" value="6200" size="10" onchange="updateField(this.name + '=' + this.value);"/></td>
<td id="rate"><div id="result"></div> <input type="text" name="rate|499|6200-5200-4600-5600-4100|1" id="499" value="5200" size="10" onchange="updateField(this.name + '=' + this.value);"/></td>
<td id="rate"><div id="result"></div> <input type="text" name="rate|499|6200-5200-4600-5600-4100|2" id="499" value="4600" size="10" onchange="updateField(this.name + '=' + this.value);"/></td>
<td id="rate"><div id="result"></div> <input type="text" name="rate|499|6200-5200-4600-5600-4100|3" id="499" value="5600" size="10" onchange="updateField(this.name + '=' + this.value);"/></td>
<td id="rate"><div id="result"></div> <input type="text" name="rate|499|6200-5200-4600-5600-4100|4" id="499" value="4100" size="10" onchange="updateField(this.name + '=' + this.value);"/></td>
</tr>
<tr id="zebra">
<td>03 Nov 2012</td>
<td id="rate"><div id="result"></div> <input type="text" name="rate|500|6200-5200-4500-5600-4100|0" id="500" value="6200" size="10" onchange="updateField(this.name + '=' + this.value);"/></td>
<td id="rate"><div id="result"></div> <input type="text" name="rate|500|6200-5200-4500-5600-4100|1" id="500" value="5200" size="10" onchange="updateField(this.name + '=' + this.value);"/></td>
<td id="rate"><div id="result"></div> <input type="text" name="rate|500|6200-5200-4500-5600-4100|2" id="500" value="4500" size="10" onchange="updateField(this.name + '=' + this.value);"/></td>
<td id="rate"><div id="result"></div> <input type="text" name="rate|500|6200-5200-4500-5600-4100|3" id="500" value="5600" size="10" onchange="updateField(this.name + '=' + this.value);"/></td>
<td id="rate"><div id="result"></div> <input type="text" name="rate|500|6200-5200-4500-5600-4100|4" id="500" value="4100" size="10" onchange="updateField(this.name + '=' + this.value);"/></td>
</tr>
<tr id="zebra">
<td>04 Nov 2012</td>
<td id="rate"><div id="result"></div> <input type="text" name="rate|501|6200-5200-4600-5400-4100|0" id="501" value="6200" size="10" onchange="updateField(this.name + '=' + this.value);"/></td>
<td id="rate"><div id="result"></div> <input type="text" name="rate|501|6200-5200-4600-5400-4100|1" id="501" value="5200" size="10" onchange="updateField(this.name + '=' + this.value);"/></td>
<td id="rate"><div id="result"></div> <input type="text" name="rate|501|6200-5200-4600-5400-4100|2" id="501" value="4600" size="10" onchange="updateField(this.name + '=' + this.value);"/></td>
<td id="rate"><div id="result"></div> <input type="text" name="rate|501|6200-5200-4600-5400-4100|3" id="501" value="5400" size="10" onchange="updateField(this.name + '=' + this.value);"/></td>
<td id="rate"><div id="result"></div> <input type="text" name="rate|501|6200-5200-4600-5400-4100|4" id="501" value="4100" size="10" onchange="updateField(this.name + '=' + this.value);"/></td>
</tr>
</table>
现在的问题是:
请建议。
答案 0 :(得分:0)
您正在做的是违反ID的含义,即元素的唯一标识符。当然,样式规则适用于具有特定ID的所有元素,但您应该在DOM中保持您的ID唯一性。由于某种原因,存在document.getElementById
而不是getElementsById
(注意额外的&#39;)。
只需为您的任务使用其他东西。确切地说,是类。所以,有像
这样的元素<div class="result"></div>
...
<span class="result"></span>
...
你可以做到
var outputs = document.getElementsByClassName("result");
for (var i = 0; i < outputs.length; i++)
outputs[i].innerHTML = "<img src=\"../images/ico_no.png\" alt=\"X\"/>";
答案 1 :(得分:0)
首先,您可以使用jQuery Ajax实现。这将使事情变得更容易。其次,id
应该是唯一的,并且您有多个具有相同ID的元素。
答案 2 :(得分:0)
你的第一个问题是所有的div,input和trs都有相同的id。 ID可以在html页面上存在一次,因此您应该将它们重命名为更具描述性的内容。此外,id不能以数字开头(f.e id =“498”,如下例所示)
<tr id="zebra1">
<td>01 Nov 2012</td>
<td id="rate_20121101_498"><div id="result_20121101_498"></div> <input type="text" name="rate|498|6400-5200-4600-5600-4100|0" id="input_20121101_498" value="6400" size="10" onchange="updateField(this.name + '=' + this.value);"/></td>
.... and so forth
要知道应该更新哪个值,可以让PHP返回JSON响应,例如:
[
{ "id" : "20121101_498", "status" : "error" },
{ "id" : "20121101_500", "status" : "success" }
]
然后您可以在doSomethingAfterUpdate函数中访问它。
function doSomethingAfterUpdate(JSON){
// Loop through the json response
for (var i = 0 ; i < JSON.length ; i++)
{
// Set the class name for each object in the json response
document.getElementById('result_' + JSON[i].id).className = JSON[i].status;
// If you want to you can also access the input from here using
// document.getElementById('input_' + JSON[i].id)
}
}
您也可以将图像直接放在css类中:
.error
{
background:url('/images/ico_no.png') no-repeat;
width:20px;
height:20px;
}
答案 3 :(得分:0)
这对我来说太难了。所以我决定只为所有更新提供一个状态:
function doSomethingAfterUpdate(retValFromPHP){
if (retValFromPHP == "x"){
$("#result").fadeIn(1000);
document.getElementById("result").innerHTML = "<img src=\"../images/ico_no.png\" alt=\"X\"/> Error";
document.getElementById("result").className="error"
$("#result").fadeIn(1000);
}else{
$("#result").fadeIn(100);
document.getElementById("result").innerHTML = "<img src=\"../images/ico_yes.png\" alt=\"Y\" /> Succeed";
document.getElementById("result").className="success"
$("#result").fadeOut(1000);
}
}
这将使所有更新状态浮动在内容上。问题解决了!