Firefox не выполняет «асинхронную» загрузку при динамическом внедрении скрипта? - PullRequest
2 голосов
/ 28 декабря 2010

У меня есть 2 функции js, request () и response (). Запрос вставляет динамический тег сценария в DOM, загружая некоторый «сценарий» с сервера. Сценарий, который приходит с сервера, настроен на вызов response ().

Теперь, если я немедленно совершаю 5 вызовов один за другим, и если первый еще ждет, следующие 4 вызова все еще выполняются, ответ возвращается (я видел это из Firebug), но response () не вызывается пока не вернется первый.
Это происходит только в Firefox. :(

Почему это не вызывает функцию?

PS:

  1. если первый запрос задерживается, я не волнует его результаты, я хочу последний загружаемый и ответ на звонок без задержек ..
  2. Я пробовал $ .ajax с dataType, установленным в 'jsonp', чистая вставка тегов скрипта в стиле javascript и $ .getScript. Кажется, с FF ничего не получается: (

Редактировать: Для тех, кто запрашивал образцы кода:

function request(){

    var URL = 'http://xxx.xxx.xxx.xxx/cgi-bin/response.php?callback=?';
    callHandle = $.getScript(URL);

}

function response(data){

      alert(data);
}

функция запроса вызывает PHP-скрипт сервера, который имеет следующий код:

$data = $_GET['callback']; //using just to identify request uniquely.
sleep(rand(1,10));
echo "response(".$data.")";

Теперь, если первый запрос занимает 10 секунд, а второй запрос занимает 2 секунды, ответ должен быть отозван для второго запроса. Но он получает ответ, а вместо предупреждения ждет завершения первого запроса в Firefox. Почему это так?

Ответы [ 2 ]

2 голосов
/ 28 декабря 2010

Я видел то же самое: Firefox обрабатывал ответные ответы (включения javascript, сделанные с document.createElement ('script') и добавляли их в головной узел) в порядке, в котором элементы скрипта добавлялись к документу.,С точки зрения программиста это упрощает программирование.Тем не менее, я думаю, вы должны относиться к этому как к деталям реализации из этого браузера (версии), а не как к гарантии.Google Chrome выполняет включенные сценарии в любом (неожиданном) порядке.

Это поведение уже называется "старым поведением Firefox" при обращении к соответствию Firefox 4 и HTML5 (http://hsivonen.iki.fi/script-execution/)

Старое поведение Firefox

Вставленные сценарием внешние неасинхронные сценарии без задержки выполняются в том порядке, в котором они были вставлены в документ.

Вы пытались вставитьваши скрипты с document.write?

0 голосов
/ 28 декабря 2010

Если это не по образовательным причинам, я предлагаю использовать библиотеку, которая конкретно занимается этими браузерными особенностями. например: http://code.google.com/p/controljs/

...