Вопрос AJAX: сервер не возвращает правильный код состояния в случае ошибки - PullRequest
1 голос
/ 28 августа 2011

При разработке механизма обработки ошибок для скрипта AJAX на моем веб-сайте я обнаружил, что единственный код состояния, который был возвращен сервером в случае ошибки, был 0 (или «неопределенный»). Даже когда я преднамеренно создал ошибку 404, запросив несуществующий файл, единственным кодом ошибки, который был возвращен сервером, было 0. Я считаю, что эта проблема вызвана сервером моего веб-хоста (www.000webhost.com), когда он перенаправляет 404 ошибки на http://error404.000webhost.com/?, однако мне нужно найти способ получить правильный код ошибки из ответа сервера, чтобы предоставить обратную связь пользователю о том, что пошло не так ... Итак, мой вопрос: как сделать так, чтобы сервер возвращал правильный код состояния, или, если проблема не в этом: что не так с моим кодом?

var xmlhttp;
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else { // code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4) {

    alert(xmlhttp.status); //this alert box shows 200 normally, but during a error only shows 0

if (xmlhttp.status==200) { // 200 = OK, process result

//stuff for processing the result (when there is no error)

}
else { // error handling (creates a jgrowl notification showing the status code)
    $('#jGrowl-container').jGrowl('AJAX Error Code: ' + xmlhttp.status', {sticky: true, theme: 'error'});
}
}
}
xmlhttp.open("POST", "process.php", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send("&s="+ScoutID + "&pw="+pword + "&rt="+RequestType + RequestText);
}

1 Ответ

0 голосов
/ 31 августа 2011

Могут быть разные причины, по которым вы НЕ получаете правильные коды http-статуса в ответ.

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

  2. Ваш сервер перенаправляет в случае 404, который может не позволить браузеру отслеживать его как 404, а вместо 302 или 303 (перенаправление). Немногие хостинговые компании делают это.

Также я заметил, что вы уже используете jQuery, так почему бы не использовать его и для ваших вызовов ajax. Это работает хорошо. Вы можете проверить это в http://api.jquery.com/category/ajax/

...