JQuery AJAX успеха цепочки проблем Internet Explorer - PullRequest
1 голос
/ 13 мая 2010

У меня есть функция jQuery ajax, которая извлекает данные JSON. В блоке успеха я вызываю другую функцию для анализа данных и обновления страницы. В конце этой функции синтаксического анализа / обновления делается другой вызов ajax. Это прекрасно работает во всех браузерах, кроме Internet Explorer (7 и 8). Проблема заключается в том, что Internet Explorer считает, что выполнение сценария занимает слишком много времени, поскольку успешный блок первого вызова ajax не завершается до завершения второго вызова ajax.

Я получаю сообщение: «Прекратить запуск этого скрипта? Сценарий на этой странице вызывает медленную работу вашего веб-браузера. Если он продолжит работать, ваш компьютер может перестать отвечать».

Мой код JQuery:

$("#id_select").bind("change", function(e){
  $.ajax({
    url: "/retrieve_data.js",
    data: {id:$(e.target).children(":selected").attr("value")},
    type: "get",
    dataType:"json",
    success: function(data, status, form){              
      processData(data);
    },
    error: function(response, status){
      alert(response.responseText);
    }
  });
})

Буду признателен за любые предложения о том, как заставить IE остановить тайм-аут или выполнить эту задачу без переписывания всех моих функций jQuery.

Ответы [ 2 ]

0 голосов
/ 07 августа 2010

Мое решение фактически закончилось рефакторингом всего этого. Я думаю, что это работает лучше, вместо того, чтобы выполнять запрос Ajax, анализировать эти результаты, обновлять страницу, а затем делать еще один запрос Ajax в блоке успеха. В итоге я просто возвращал весь JSON, необходимый для обновления страницы при каждом запросе. Таким образом, каждый запрос будет возвращать больше данных, а затем передавать эти данные другим функциям, которые обновляют страницу. Это на самом деле ускоряет процесс, так как запросов меньше, а IE не блюет повсюду.

Во время рефакторинга я столкнулся с проблемой, когда перед обновлением HTML требовался вызов $ ("# selector"). Empty ().

До:
var my_new_html = ...;<br /> $("#selector").html(my_new_html);

После:
var my_new_html = ...;<br /> $("#selector").empty().html(my_new_html);

Сначала очистка содержимого перед обновлением приводила к тому, что IE больше не возвращался с ошибкой остановки ответа.

Надеюсь, это поможет некоторым людям.

0 голосов
/ 27 мая 2010

Я на самом деле написал что-то, что может позаботиться об этом для вас, если вы можете немного разбить ваш код. Вам на самом деле нужно несколько вещей. Во-первых, это расширение jQuery, которое создает рабочие очереди: http://code.ghostdev.com/posts/javascript-threading-revisted-jquery. После того, как вы это поняли и немного протестировали, его можно расширить, создав очередь AJAX: http://code.ghostdev.com/posts/javascript-threading-ajax-queueing.

В моей личной ситуации у меня был AJAX-запрос, который извлекал довольно здоровенный блок JSON, и я не мог обработать все это, когда он вернулся, без выдачи предупреждений сценария. Это позволяет функции возвращаться, но продолжает обрабатываться через регулярные настраиваемые интервалы, пока не будет обработан весь блок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...