вызов jquery ajax — каждая вторая попытка завершается неудачей с xhr.status = 0

#jquery #ajax #function

#jquery #ajax #функция

Вопрос:

Вот мой код:

   $('#select').change(function() {
    $.ajax({
      url: Drupal.settings.basePath   'custom-ajax/'   $(this).val(),
      dataType: 'html',
      success: function(response) {
        $('#container').html(response);
      },
      error: function(xhr, ajaxOptions, thrownError) {
        alert(xhr.status);
      }   
    }); 
  });
  

Первое «изменение» моего выбора возвращает «undefined (неопределенный)» в консоли, второе изменение работает как ожидалось ($ (‘#container’).html(response);). третье изменение возвращает неопределенный результат, четвертое изменение возвращает ожидаемый результат и т.д.

В каждом случае выполняется полный URL-адрес обратного вызова ajax — если я скопирую и вставлю этот URL-адрес в новое окно браузера, я могу нажать обновить 100 раз, и каждый раз он загружается успешно, поэтому я не верю, что это как-то связано с тем, что страница не отвечает. Стоит упомянуть, что при выполнении обратного вызова с ошибкой это происходит сразу после изменения выпадающего списка — у меня не создается впечатления, что он даже пытается вызвать указанный URL.

Ответ №1:

Если он даже не вызывает URL, как вы предлагаете, это говорит о том, что URL недействителен. Попробуйте посмотреть, что это возвращает в нескольких тестовых примерах:

   $('#select').change(function() {
    var url = Drupal.settings.basePath   'custom-ajax/'   $(this).val();
    alert(url);
    window.location = url;
  });
  

Комментарии:

1. Отличная идея для отладки! Я вставил этот код, и каждое изменение select правильно перенаправляет меня на новый URL. Я должен отметить, что консоль также показывает полный URL, который она пыталась получить, когда возвращает «undefined» — в этом случае я могу скопировать и вставить этот URL, и он нормально загружается.

2. Хорошо, можете ли вы предоставить HTML и пример URL-адреса, т. Е. все, что Drupal.settings.basePath возвращает, чтобы я мог это протестировать?

3. Возвращаемый HTML-код (1 пример из многих …): <h2>VimNET Explorer</h2> <p>Lorem ipsum delor sit amet …</p>

4. Нет, я имею в виду разметку на странице. #select И #container , например.

5. <select id="select"> <option selected="selected" value="">- Choose a Category -</option> <option value="vimnet">VimNET Explorer</option> <option value="plc">PLC</option> </select> <div class="clear-block"></div> <div id="container"></div>