2

次のコードを使用すると、結果が正常に表示されました。

window.onload = setInterval(func_name, 5000);

function func_name() {
    var ids = document.getElementById('aa').value;
    ids_array = ids.split(',');
    for (var i in ids_array) {
        if (document.getElementById('a' + ids_array[i])) {
            document.getElementById('a' + ids_array[i]).innerHTML = ids_array[i];

ただし、代わりに AJAX リクエストを使用すると、次のエラーが発生しますTypeError: document.getElementById(...) is null

var xmlhttp;
if (window.XMLHttpRequest) {
    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('a' + ids_array[i]).innerHTML = xmlhttp.response; // error is here... TypeError: document.getElementById(...) is null
    }
}
xmlhttp.open("GET", "<?php echo baseurl . 'notification.php';?>?users_id=" + ids_array[i], true);
xmlhttp.send();
}
}
}
}

私は初心者です、このタイプのコードで申し訳ありません

4

3 に答える 3

1

ids_array[i] 変数が xmlhttp.onreadystatechange=function() で正しく定義されていません。これは、「i」変数が FOR サイクルの反復ごとに再定義されるためです。

したがって、すべてのコードは次のようになります。

var ids = document.getElementById('aa').value;
var ids_array = ids.split(',');

for (var i=0; i<ids_array.length; i++)
{
  if (document.getElementById('a' + ids_array[i])) {
    // For every iteration, create a closure that 
    // stores the "i" variable multiple times with different values in the closure.
    // Also create an xmlhttp Object for each request.
    var closure = function()
    {
      var xmlhttp;
      if (window.XMLHttpRequest) {
        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('a' + ids_array[i]).innerHTML = result;
          // After this function executes, it and any closures it has will be
          // available for garbage collection.
        }
      }
      xmlhttp.open("GET", "<?php echo baseurl . 'notification.php';?>?users_id=" + ids_array[i], true);
      xmlhttp.send();

      // This code ends, but xmlhttp objects wait for onreadystatechange event.
    }
  }
}

閉鎖についてもっと読むことをお勧めします。

于 2013-08-02T12:54:46.150 に答える
0

ブラウザが問題を報告した場所 (コード行) についての詳細は投稿しませんでしたが、私の推測では次のようになります。

var ids = document.getElementById('aa').value;

最も可能性の高い原因は、 の id( id="aa") を持つ要素がないことですaa。それか、あなたがこのような奇妙なことをしたかのどちらかです:

document = ...

コードのどこかに。それnullはむしろundefined奇妙です。

于 2013-08-02T12:43:18.037 に答える