2015-01-31 3 views
0

Привет, stackoverflow commmunity, у меня есть проблема STRANGE. Я использую ajax для загрузки файла на сервер. Вот код:Ajax readystatechange странное поведение

\t // request 
 
\t request.addEventListener('readystatechange', function(event){ 
 
\t \t if(this.readyState==4 && this.status==200){ 
 
\t \t \t if (request.responseText=="upload_successful"){ 
 
\t \t \t \t alert("Thank you for sharing past test."); 
 
\t \t \t \t $(".form").hide(); 
 
\t \t \t \t $(".overlay").hide(); 
 
\t \t \t } 
 
\t \t } 
 
\t \t else { 
 
\t \t \t alert("Sorry, there was a problems adding your test."); 
 
\t \t \t console.log("This server replied with HTTP status "+this.status); 
 
\t \t } 
 
\t });

Все отлично работает на моем локальном хосте, но на реальном разъединяют мое предупредительное сообщение («К сожалению, проблема и т.д ..») появляется (два или три раза) после этого («Спасибо за обмен ...») появляется предупреждение, и мой файл загружается на сервер и добавляется в базу данных тоже. Итак, почему он выходит два или три раза на ELSE, а затем переходит к IF-части.

ответ

2

Запрос AJAX проходит через несколько промежуточных состояний до его завершения. Каждое из этих изменений состояния запускает обработчик onreadystatechange. Эти другие состояния не являются ошибками, они всего лишь временные условия до завершения запроса.

Ошибка указанна status. Если вы хотите сообщить об ошибке, это должно быть примерно так:

if (this.readyState == 4) { // request is completed 
    if (this.status == 200 && this.responseText=="upload_successful") { // request was successful 
     alert("Thank you for sharing past test."); 
     $(".form").hide(); 
     $(".overlay").hide(); 
    } else { 
     alert("Sorry, there was a problems adding your test."); 
     console.log("This server replied with HTTP status "+this.status); 
    } 
} 
-1

Я нашел решение своей проблемы, просто переведя alert() в первые IF-инструкции, поэтому пользователь больше не видит его в случае, если файл загружен. Но мне все еще интересно узнать, почему мы прыгаем несколько раз на ELSE.

+1

XHR проходит через множество промежуточных состояний, прежде чем перейти к состоянию 4. – Barmar

Смежные вопросы