Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.12.2010, 19:32
Кандидат Javascript-наук
Отправить личное сообщение для Slavenin Посмотреть профиль Найти все сообщения от Slavenin
 
Регистрация: 20.11.2010
Сообщений: 143

ajax, завершение функии до получения ответа
Всем доброго времени суток!
Есть следующая ситуация: создаю специальную функцию которая при вызове создает объект XMLHttpRequest() и шлет определенные запросы на сервер.

далее вызываю эту функцию дважды

alert('запрос на запись');
        sendAnsServ(('insertParts.php?name='+ mas_nameM + '&country=' + mas_country + '&idMode=newMark'), 8, '');
alert('запрос на выборку');
       sendAnsServ(('insertParts.php?name='+ mas_nameM + '&idMode=selMark'), 8, '');


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

код функции примерно такой:
function sendAnsServ(pId, mode, id)
{
var xmlhttp = getXmlHttp();
xmlhttp.open('GET', pId + '&mode=' + mode, true);
xmlhttp.onreadystatechange = function() 
{
if (xmlhttp.readyState == 4) 
{
if(xmlhttp.status == 200) 
{
...
if(mode == 8)
  {
    document.getElementById('resServ').value = xmlhttp.responseText;
  }
}
}
}
xmlhttp.send(null);
}


как сделать чтобы функция не завершалась до момента получения ответа с сервера?

если написать что-то типа:

function sendAnsServ(pId, mode, id)
{
//alert(pId + " " + mode + " " + id);
var xmlhttp = getXmlHttp();
xmlhttp.open('GET', pId + '&mode=' + mode, true);
var flag = true;
while(xmlhttp.readyState != 4)
{
xmlhttp.onreadystatechange = function() 
{
if (xmlhttp.readyState == 4) 
{
if(xmlhttp.status == 200) 
{
...
if(mode == 8)
{
document.getElementById('resServ').value = xmlhttp.responseText;
}
}
}
}
if(flag)
{
xmlhttp.send(null);
flag = false;
}
}
}


то это приводит к циклу который грузит браузер, да и эксплорер постоянно предлагает прекратить выполнение скриптов. Помогите решить проблему пожалуйста
Ответить с цитированием
  #2 (permalink)  
Старый 04.12.2010, 20:24
Кандидат Javascript-наук
Отправить личное сообщение для Slavenin Посмотреть профиль Найти все сообщения от Slavenin
 
Регистрация: 20.11.2010
Сообщений: 143

проблему решил посылкой синхронного запроса, но всплыла другая проблема, перестали читаться переменный из get массива, в базу пишется пустая строка, хотя при передаче запроса все нормально
Ответить с цитированием
  #3 (permalink)  
Старый 05.12.2010, 01:57
Кандидат Javascript-наук
Отправить личное сообщение для Slavenin Посмотреть профиль Найти все сообщения от Slavenin
 
Регистрация: 20.11.2010
Сообщений: 143

ааа, что за шаманство...?
при посылке синхронного запроса методом POST функцией:
function sendAnsServP(pId, mode, id)
{
	var xmlhttpP = getXmlHttp();
	pId += '&mode=' + mode;
	xmlhttpP.open('POST', pId, false);
	xmlhttpP.setRequestHeader("Content-length", pId.length);
	xmlhttpP.setRequestHeader("Connection", "close");
	xmlhttpP.onreadystatechange =function()
	{
		if (xmlhttpP.readyState == 4) 
		{
		//alert('статус = ' + xmlhttp.status);
        	if(xmlhttpP.status == 200) 
			{
				document.getElementById('resServ').value = xmlhttpP.responseText;
			}
		}
	}
	xmlhttpP.send(pId);
}


я достаю на стороне сервера эти данные из массива GET... при этом массив POST пуст! Что за удивительные вещи, это что что б никто не догадался что ли?
Ответить с цитированием
  #4 (permalink)  
Старый 05.12.2010, 02:11
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от Slavenin
я достаю на стороне сервера эти данные из массива GET... при этом массив POST пуст! Что за удивительные вещи, это что что б никто не догадался что ли?
наверно потому что вы поместили данные в GET
Сообщение от Slavenin
xmlhttpP.open('POST', pId, false);
и при этом неправильно попытались поместить их в POST
Сообщение от Slavenin
xmlhttpP.send(pId);
а надо так:
http://xmlhttprequest.ru/#encoding
Сообщение от Slavenin Посмотреть сообщение
Что за удивительные вещи, это что что б никто не догадался что ли?
юмор тут неуместен
Ответить с цитированием
  #5 (permalink)  
Старый 05.12.2010, 02:37
Кандидат Javascript-наук
Отправить личное сообщение для Slavenin Посмотреть профиль Найти все сообщения от Slavenin
 
Регистрация: 20.11.2010
Сообщений: 143

благодарю, что указали на мою ошибку которая заключалась в том, что я забыл заменить отсылку параметров в функции на статичный адрес страницы, все поправил, все заработало как надо.
Вопрос, из статьи, которую я кстати изучил до этого, не понятно, следует ли отсылать заголовок xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded') если данные формируются вручную а не берутся из формы?
Ответить с цитированием
  #6 (permalink)  
Старый 05.12.2010, 03:23
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

следует
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обновление страницы после получения ответа от сервера potrashitel AJAX и COMET 9 24.02.2015 10:04
Скрытие блоков после получения ответа nemo Общие вопросы Javascript 1 22.11.2009 10:22
Дописать стили после получения ответа nemo AJAX и COMET 1 21.11.2009 20:46
Ajax и получение ответа до полной загрузки страницы Suspended jQuery 3 16.11.2008 14:57
как дождаться AJAX ответа scuter Общие вопросы Javascript 3 23.03.2008 05:54