Roland M Smith Ответов: 2

Обработка ошибок в javascript


Ниже приведен Javascript для страницы, над которой я работаю в качестве демонстрации того, как выполнять фоновые задачи в стиле AJAX. Событие onchange элемента управления select вызывает функцию AjaxRequest.

Если код, выполняемый по адресу в переменной url, возвращает состояние 500, он завершает выполнение строки после catch(err). Я думал, что он выполнит предупреждение и вообще не вызовет AjaxResults. В Chrome с показом консоли он показывает, что результаты отправки составляют 500.

Код отлично работает, когда нет ошибки. Мне нужно знать, почему обработка ошибок не работает.

Что я уже пробовал:

function removeOptions(selectbox)
{
   var i;
   for(i = selectbox.options.length - 1 ; i >= 0 ; i--) {
      selectbox.remove(i);
   }
}

function AjaxResults(xhr, funct) {
   var xmldoc = xhr.responseXML;
   // process the returned data
   switch (funct) {
      case 1:
         try {
            ddlbProducts = document.getElementById("products");
            removeOptions(ddlbProducts);
            var products = xmldoc.getElementsByTagName("d_products_row");
            for (var i = 0; i < products.length; i++) {   
               var prodname  = xmldoc.getElementsByTagName('productname').item(i).firstChild.data;
               var productid = xmldoc.getElementsByTagName('productid').item(i).firstChild.data;
               var option = document.createElement("option");
               option.innerHTML = prodname;
               option.value = productid;
               ddlbProducts.options.add(option);
            }
         }
         catch(err) {
            document.documentElement.innerHTML = xhr.responseText;
         }
         break;
      default:
         alert('Unsupported function: ' + funct);
   }
}

function AjaxRequest(url, funct) {
   xhr = new XMLHttpRequest();

   xhr.onload = function () {
      if (xhr.status = 200) {
         AjaxResults(xhr, funct);
      } else {
         alert('Error: ' + xhr.statusText);
      }
   };

   xhr.open('GET', url, true);
   xhr.send();
}

2 Ответов

Рейтинг:
4

Kornfeld Eliyahu Peter

if (xhr.status = 200) {
Эта строка всегда верна... попробуйте == или === как подходит...


Рейтинг:
1

MadMyche

Лучше всего было бы определить некоторые слушатели событий для вашего то XHR и прикрепите их к вашим запросам AJAX.

У Mozilla есть хорошая документация по этому вопросу, в разделе мониторинг прогресса подзаголовок:
Использование XMLHttpRequest - Web API | MDN[^]