[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Небольшой вопрос по приему дынных ajax
Xes
Есть нижеследующие функции оброботки аякс запроса.
В том случае если пхп не возвращает ни какие данные (например sql запрос был пустым), фаерфокс показывает ошибку парсера (***) ResponseParse = JSON.parse(response);
У меня вопрос если ответа не было тогда почему статус события сразу же 4 (ответ получен?) и статус ответа 200 (все прошло успешно?), почему дошло до этого события. Причем сразу, а не через 10 секунд по аборту например, кстати еще не тестил что будет в этом случае.

Кнечно я доработал возврат пустого джейсана чтобы не было ошибки. Но хотелось бы не дописывать события на такой случай, а чтобы просто Reception() не вызывала парсер.

  //Запрос к серверу. Параметры запроса передаются через POST
function Request(query, file)
{
xmlHttp.open('POST', file, true);
xmlHttp.onreadystatechange = Reception;
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
xmlHttp.send(query);
timeoutRecuest = setTimeout(function(){xmlHttp.abort();}, 10000);
}
//Присваеваем ссылку на функцию, события onreadystatechange изменения статуса события
function Reception()
{
if(xmlHttp.readyState == 4)
{
clearTimeout(timeoutRecuest);
if(xmlHttp.status == 200)
{
response = xmlHttp.responseText;
SwitchFunction();
}
}
}

//Функция переключающая между запрашиваемыми функциями
function SwitchFunction()
{
ResponseParse = JSON.parse(response); (***)
var gotofunction = ResponseParse.gotofunction;
switch(gotofunction)
{
case 'ShowRating':
ShowRating();
break;
case 'ShowHotelsSelected':
ShowHotelsSelected();
break;
case 'ShowNewHotels':
ShowNewHotels();
break;
default:
break;
}

}




Спустя 5 минут, 37 секунд (23.08.2011 - 08:55) kirik написал(а):
Цитата (Xes @ 23.08.2011 - 01:50)
У меня вопрос если ответа не было тогда почему статус события сразу же 4 и статус ответа 200 почему дошло до этого события.

А почему он что-то другое должен возвращать? Запрос прошёл успешно, и сервер вернул результат (в твоём случае пустой) со статусом 200.

Цитата (Xes @ 23.08.2011 - 01:50)
Но хотелось бы не дописывать события на такой случай, а чтобы просто Reception() не вызывала парсер.

Попробуй заключить JSON.parse в try-catch блок. Если конечно эта функция бросает исключения. Тогда можно в catch'e прирывать выполнение функции.

Спустя 12 минут, 39 секунд (23.08.2011 - 09:08) Xes написал(а):
function SwitchFunction()
{
try
{
ResponseParse = JSON.parse(response);
var gotofunction = ResponseParse.gotofunction;
switch(gotofunction)
{

}
}

catch(e){}
}


Спасибо пашет.

Спустя 7 минут, 17 секунд (23.08.2011 - 09:15) kirik написал(а):
Xes
Можно было аккуратнее:
    try {
ResponseParse = JSON.parse(response);
} catch(e) {
// тут желательно глянуть что за "e": console.log(e)
// и добавить if только на эту ошибку. иначе - кидать исключение.
// ну чтобы не искать потом другую ошибку, пойманную этим блоком

return;
}
var gotofunction = ResponseParse.gotofunction;
...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.