В том случае если пхп не возвращает ни какие данные (например 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;
...