Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2012, 01:50   #1
Alex1991
Форумчанин
 
Аватар для Alex1991
 
Регистрация: 18.10.2008
Сообщений: 166
Вопрос Запросы(GET, POST) идут не по очереди

Есть функция:
Код:
function makeRequest(url){
 var http = new XMLHttpRequest(); 
 http.open('GET', url, true);
 http.onreadystatechange = function()
 {
	if(http.readyState == 4 && http.status == 200)
        {
		//если все хорошо то что-то делаем
		document.getElementById('Memo1').value = http.responseText;
	}
	http.send(null);
 }
При клике на кнопку вызывается выше описаная функция только с разными URL:
Код:
onclick="makeRequest('ссылка','GET');makeRequest('ссылка','GET');makeRequest('ссылка','GET');"
Проблема состоит в том что запросы идут не по очереди(как будто рандомно(смотрел сниффером))

Для теста сделал три кнопки и к каждой привязал по запросу то так все ок.
Подскажите пожалуйста в чем проблема ?
Alex1991 вне форума Ответить с цитированием
Старый 09.03.2012, 02:02   #2
spein
Программист
Форумчанин
 
Аватар для spein
 
Регистрация: 27.02.2009
Сообщений: 505
По умолчанию

Сделайте callback функции, как это делается в jQuery. это не сложно
there are no limits when you're software engineer
spein вне форума Ответить с цитированием
Старый 09.03.2012, 02:11   #3
Alex1991
Форумчанин
 
Аватар для Alex1991
 
Регистрация: 18.10.2008
Сообщений: 166
По умолчанию

spein, спасибо сейчас буду пробовать

А вы не могли бы привести какой-то простой пример использования callback ?
Alex1991 вне форума Ответить с цитированием
Старый 09.03.2012, 02:50   #4
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Callback Вы уже и в своём коде используете.
Код:
http.onreadystatechange = function()
 {
	if(http.readyState == 4 && http.status == 200)
        {
		//если все хорошо то что-то делаем
		document.getElementById('Memo1').value = http.responseText;
	}
	http.send(null);
 }
С jQuery это будет выглядеть примерно так
Код:
$.post("/ajax.php", {param1: 1, param2: 2}, function(response) {
  if (response.status == "ok") { 
  //делаем следующий ajax-запрос
  }
}, "json");
это если ответ возвращается в формате json
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 09.03.2012, 19:51   #5
Alex1991
Форумчанин
 
Аватар для Alex1991
 
Регистрация: 18.10.2008
Сообщений: 166
По умолчанию

Хотелось бы без Jquery сделать,
Только-что написал чтобы вызов функции осуществлялся рекурсивно, но всё-равно проблема та же..
Мне просто нужно сделать следующее:
Get запрос log-out
Post запрос log-in
Get запрос
Get запрос

Подскажите пожалуйста как это сделать все запросы по-очереди ?
И хотелось бы узнать почему оно так работает ?
Спасибо.
Alex1991 вне форума Ответить с цитированием
Старый 09.03.2012, 20:53   #6
spein
Программист
Форумчанин
 
Аватар для spein
 
Регистрация: 27.02.2009
Сообщений: 505
По умолчанию

ну тут главное осуществить по-порядку первые два запроса, а следом уже 3-4 вне зависимости порядка:
Код:
function makeRequest(url,callback){
 var http = new XMLHttpRequest(); 
 http.open('GET', url, true);
 http.onreadystatechange = function()
 {
	if(http.readyState == 4 && http.status == 200)
        {
		//если все хорошо то что-то делаем
		document.getElementById('Memo1').value = http.responseText;
                if (typeof callback == "function") callback();
	}
	http.send(null);
 }
makeRequest("firsturl.php", makeRequest("secondurl.php", makeRequest("thirdurl.php", makeRequest("fourthurl.php"))));
there are no limits when you're software engineer
spein вне форума Ответить с цитированием
Старый 10.03.2012, 00:05   #7
Alex1991
Форумчанин
 
Аватар для Alex1991
 
Регистрация: 18.10.2008
Сообщений: 166
По умолчанию

spein, спасибо, но к сожалению эта конструкция также не помогла , есть ещё варианты ?
Alex1991 вне форума Ответить с цитированием
Старый 10.03.2012, 12:41   #8
spein
Программист
Форумчанин
 
Аватар для spein
 
Регистрация: 27.02.2009
Сообщений: 505
По умолчанию

Ну логично будет предположить, что дело в выполнении условия доставки. То есть выполнение след. запроса идет не дождавшись ответа от предыдущего. Условия проверьте.
there are no limits when you're software engineer
spein вне форума Ответить с цитированием
Старый 15.03.2012, 01:05   #9
Alex1991
Форумчанин
 
Аватар для Alex1991
 
Регистрация: 18.10.2008
Сообщений: 166
По умолчанию

Решил проблему следующим образом:
Изменил третий параметр на false (который отвечает за асинхронность)
и всё заработало!
http.open('GET', url, false);

Всем спасибо за помощь.
Alex1991 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
post запросы spyware58rus Работа с сетью в Delphi 2 17.12.2011 20:52
GET и POST запросы Dеlphi Visual C++ 2 24.09.2011 17:41
GET/POST запросы SsdD Работа с сетью в Delphi 1 08.09.2010 20:24
Post запросы Скарам Общие вопросы .NET 9 08.08.2010 19:46
Post запросы ElectroMyStyle Фриланс 1 17.12.2009 17:23