Функция отправки Ajax не работает? - PullRequest
1 голос
/ 20 января 2010

Всякий раз, когда я запускаю этот файл, код запускается до точки, где срабатывает функция отправки, и затем она срабатывает, только если у меня есть функция оповещения непосредственно за ней, если я уберу оповещение («отправлено»); затем он отвечает с ServerReadyyState: 1.

В чем может быть проблема? Кто-нибудь, пожалуйста, помогите, я пробовал это на моей локальной машине и на моем личном сервере и получил те же результаты. Любая помощь с благодарностью.

Код:

/**
 * @author d
 */
var xhr;

function getPlants(xhr) {
  try {
    xhr = new XMLHttpRequest();
  } catch (microsoft) {
    try {
      xhr = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (othermicrosoft) {
      try {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (failed) {
        xhr = false;
        alert("ajax not supported");
      }
    }
  }
  xhr.open("GET", "db_interactions.php", true);


  xhr.send(null);
  alert("sent"); //the send function only works if this alert functions is here
  if (xhr.readyState == 4) {

    return xhr.responseText;
  } else {
    alert("Server ReadyState is:" + xhr.readyState);
    xhr.abort();
    //getPlants(xhr);       
  }
}

Ответы [ 2 ]

1 голос
/ 20 января 2010

AJAX является асинхронным. Вы не можете просто проверить состояние готовности сразу после.

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

xhr.onreadystatechange = function () { alert('It changed!') }

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

0 голосов
/ 20 января 2010

Запросы занимают некоторое количество времени. При добавлении alert () код останавливается, пока пользователь не нажмет ok. Таким образом, когда вы удаляете его, запрос отправляется и проверяется немедленная проверка. В результате чего незаконченный запрос.

Когда вы меняете свой код на это:

xhr.onreadystatechange=state_change
xhr.send(null);

function state_change() {
    if(xhr.readyState==4) {
         return xhr.responseText;
    } else {
         alert("Server ReadyState is:"+xhr.readyState);     
    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...