0

このリンクによると、xmlhttp.responseTextはテキストを表示しません。更新ステータスを表示するためにdividを見つけることに関して別の問題があります。応答コードがアクションを実行するのを待っている何百ものdivid= "result"があります:success || エラー。そして今、問題は私がフィールドを更新するときです。最初のdivid="result"が変更されるだけです。では、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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>

今の質問は次のとおりです。

  1. 「document.getElementById( "resultXXX")。innerHTML」のPHPからのresponseTextに従って「XXX」を変更するにはどうすればよいですか?
  2. div id = "rate [$ i]"という名前を付けて更新し、更新が成功したら返送します。

提案してください。

4

4 に答える 4

0

あなたがしていることは、IDの意味、つまり要素の一意の識別子に反することです。もちろん、スタイルルールは特定のIDを持つすべての要素に適用されますが、DOM内でIDを一意に保つ必要があります。存在するが存在document.getElementByIdしないgetElementsById(余分な「s」に注意)理由があります。

あなたの仕事のために何か他のものを使うだけです。クラス、正確には。だから、のような要素を持つ

<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\"/>";
于 2012-09-13T12:31:40.350 に答える
0

まず、jQueryAjax実装を使用できます。これにより、作業がはるかに簡単になります。第二に、id一意であると想定され、同じIDを持つ複数の要素があります。

于 2012-09-13T12:34:28.837 に答える
0

最初の問題は、すべてのdiv、input、およびtrsが同じIDを持っていることです。IDはhtmlページに1回だけ存在できるため、よりわかりやすい名前に変更する必要があります。また、IDを数字で始めることはできません(以下の例ではfe id = "498")

<tr id="zebra1">
<td>01 Nov 2012</td>
<td id="rate_20121101_498"><div id="result_20121101_498"></div>&nbsp;<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;
}
于 2012-09-13T12:36:37.163 に答える
0

それは私には難しすぎる。だから私はすべての更新に対して1つのステータスのみを作成することにしました:

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);
    }
}

これにより、すべての更新ステータスがコンテンツ上でフロートします。問題が解決しました!

于 2012-09-13T14:44:05.797 に答える