AJAX отправив запрос дважды - PullRequest
1 голос
/ 31 марта 2011

Пример URL: http://twitter.realgamingreview.com/index.php

Редактировать : забыл упомянуть: используйте тестовый вход в: test / test для имени пользователя / пароля.

Я пытаюсьсделать простой запрос AJAX для получения некоторых данных из базы данных.Целевой файл serverTime.php, кажется, работает отлично;он вставляет желаемые данные и возвращает желаемый текст отклика.

Однако, кажется, запрос запускается дважды.Это ясно, когда я перехожу через JavaScript с помощью Firebug.Это заставляет страницу «сбрасываться» (не совсем точно), так что мой курсор теряет фокус из текущего текстового поля, что является новой проблемой.В URL также указано «localhost / twitter / index.php? Message =», даже если мое сообщение на самом деле не пустое.Я хочу исправить эту довольно незначительную проблему, прежде чем из этого выйдет что-то серьезное.

JavaScript ниже.ajaxRequest - это мой объект XMLHTTPRequest.Любая помощь приветствуется!

//Create a function that will receive data sent form the server
ajaxRequest.onreadystatechange = function(){
    if (ajaxRequest.readyState == 4){
        document.getElementById('output').innerHTML = ajaxRequest.responseText;
    }
}
// build query string
var message = document.myForm.message.value;
var queryString = "message=" + message;

    //send AJAX request
    ajaxRequest.open("GET", "serverTime.php" + "?" + queryString, true);

    ajaxRequest.send(null);

Спасибо,

Paragon

Ответы [ 3 ]

4 голосов
/ 31 марта 2011

Я видел это много раз, и для меня это всегда был поджигатель.Попробуйте ОТКЛЮЧИТЬ firebug и отправьте запрос снова.Используйте fiddler или другие средства для проверки запроса, выполненного только один раз.

1 голос
/ 06 апреля 2011

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

С тех пор я изменил свою систему событий так, что я не полагаюсь на что-то столь ненадежное (теперь использую jQuery для прослушивания нажатия клавиши Enter для определенных текстовых полей).

Спасибо тем, кто нашел времяответить на мой дезинформированный вопрос.

0 голосов
/ 31 марта 2011

Когда я пишу функции AJAX в Javascript, я обычно держу в стороне переменную состояния, которая предотвращает отправку нового запроса, пока он выполняется.Если вы просто хотите игнорировать запросы, сделанные до завершения другого, вы можете сделать что-то вроде этого:

  1. Инициализировать inProgress в false.
  2. Установить inProgress в true прямо перед вызовом ajaxRequest.Отправить().Не вызывайте ajaxRequest.send (), если inProgress не имеет значения false.
  3. ajaxRequest.onreadystatechange () устанавливает inProgress в значение false, когда состояние равно 4.

В некоторых случаях, однако, выхотел бы поставить в очередь действия.Если это так, то вы не можете просто проигнорировать запрос к ajaxRequest.send (), когда inProgress имеет значение true.Вот что я рекомендую для этих случаев:

  1. Инициализировать ajaxQueue в пустой глобальный массив.
  2. Перед вызовом ajaxRequest.send () перенести запрос в ajaxQueue.
  3. В ajaxRequest.onreadystatechange (), когда состояние равно 4, извлеките массив, чтобы удалить запрос только служб.Затем, если ajaxQueue не является пустым (array.size> 0), снова нажмите и вызовите send () для возвращаемого объекта.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...