Функция Ajax частично не срабатывает при удалении оповещения - PullRequest
0 голосов
/ 24 мая 2010

У меня проблема в следующем коде:

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

}

Когда я удаляю оператор оповещения на 4 строки ниже в функции queryDB, я сталкиваюсь с проблемами. Эта функция вызывается циклом, и без предупреждения я получаю результаты только для последнего значения, отправленного этой функции. Благодаря этому я получаю все, что ожидал, и действительно не могу понять, почему.

Я слышал, что это может быть проблема синхронизации, так как я отправляю новые запросы до того, как старый будет закончен. Я также слышал упоминание об опросе, но не могу найти достаточно подробную информацию.

Я новичок в синхронных сервисах и не очень осведомлен о проблемах.

1 Ответ

1 голос
/ 24 мая 2010

На самом деле проблема в том, что вы используете глобальную переменную. Добавить:

var xmlhttp;

к началу запросаDB

Как отмечает TriLLi, предупреждение скрывает эту проблему, предоставляя время предварительного вызова до его перезаписи.

...