Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> AJAX асинхронный запрос не работает 
V
    Опции темы
mogul82
Дата 11.4.2009, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 282
Регистрация: 20.11.2008

Репутация: нет
Всего: -5



У меня такой ажакс:

Код

function sta_1(url_2)
{

/* Создание нового объекта XMLHttpRequest для общения с Web-сервером */
var xmlHttp = false;
try {
  xmlHttp = new XMLHttpRequest();
} catch (trymicrosoft) {
  try {
    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (othermicrosoft) {
    try {
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (failed) {
      xmlHttp = false;
    }
  }
}

if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
  xmlHttp = new XMLHttpRequest();
}

if (!xmlHttp) alert("Error initializing XMLHttpRequest!");

  // Открыть соединение с сервером
  xmlHttp.open("GET", url_2, false);

  // Установить функцию для сервера, которая выполнится после его ответа
   xmlHttp.onreadystatechange = null ;

  // Передать запрос
  xmlHttp.send(null);


//    Не делать ничего, пока свойство xmlHttp.readyState не будет равно 4.
//    Сервер будет записывать свой ответ в свойстве xmlHttp.responseText.        

  if(xmlHttp.readyState==4)
  {
    var response = xmlHttp.responseText;
    // alert("1");
    var obj = eval("(" + response + ")"); 
    document.write(obj.players[1].firstName);

  } else
  {
     alert("Error_1");
  }
}


Не работает методы POST и аснхронные запросы.
Если я ставлю -   xmlHttp.open("GET", url_2, false);

так -   xmlHttp.open("GET", url_2, true);
или так -   xmlHttp.open("POST", url_2, false);

То выполняется последние условие else, т.е. выводит - Error_1. Следовательно ошибка в  if(xmlHttp.readyState==4).


Как исправить? Подскажите че нибудь.

PM MAIL   Вверх
IDVsbruck
Дата 12.4.2009, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 8
Всего: 22



Н-да, наваял(а) ты ...
Во, первых, третий параметр в open как раз и отвечает за асинхронность - если true, то асинхронно, false - синхронно.
А во-вторых, ты слабо представляешь работу js. Нельзя забывать, что это однопотоковый скриптовый язык. Когда ты при асинхронном запросе отсылаешь запрос (send), выполнение скрипта не останавливается - выполняется дальнейший код, то есть сразу проверка на состояние ответа, которого еще нет и в помине, соответственно, вылетает else. Вопросом по поводу синхронного запроса не задавался, поэтому выскажу 2 предположения: одно - так же, как при асинхронном - код выполнится сразу и выскочит ошибка, либо идел "замораживание" процесса до отклика сервера, который отвечает со статусом, отличным от 4, поэтому выскакивает ошибка.

Используй заНУЛЛенное тобой событие xmlHttp.onreadystatechange, где укажи функцию-получателя, где и прописывай анализ состояния и обработку.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2802 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.