0

次のコードに問題があります。

//quesry the db for image information
function queryDB (parameters) {
     var parameters = "p="+parameters;
     alert ("hello");


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)
    {
        // use the info
  alert (xmlhttp.responseText);
    }
  } 

    xmlhttp.open("POST", "js/imagelist.php", true);
    //Send the proper header information along with the request
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length", parameters.length);
xmlhttp.setRequestHeader("Connection", "close");
xmlhttp.send(parameters);
}

これは、この関数から呼び出されます:

function buildGallery() {

    var images = document.getElementsByTagName("img");
    for (var i = 0; i< images.length; i++) {
        if (images[i].getAttribute("id").split("_")[0] == "onshow") {

            var parameters = images[i].getAttribute("id").split("_")[1];

            queryDB (parameters);
        }
    }

}

queryDB 関数でアラートステートメントを 4 行下に削除すると、問題が発生します。この関数はループによって呼び出されており、アラートがなければ、この関数に送信された最後の値の結果しか得られません。これで、私が期待していたすべてのものを手に入れることができましたが、その理由が本当にわかりません。

古いリクエストが完了する前に新しいリクエストを送信しているため、これはタイミングの問題である可能性があると聞いています。世論調査についても言及されていると聞きましたが、十分に詳細な情報が見つかりません。

私は同期サービスに不慣れで、問題をあまり認識していません。

4

1 に答える 1

1

実際、問題はグローバル変数を使用していることです。追加:

var xmlhttp;

queryDB の先頭へ

TriLLi が指摘しているように、アラートは、上書きする前に終了する前の呼び出し時間を与えることで、この問題を隠します。

于 2010-05-23T20:31:12.763 に答える