Прошлой ночью я играл с jQuery и асинхронными вызовами и обнаружил необычную проблему.Я хотел выполнить несколько вызовов Ajax внутри цикла.Я написал ниже (где rand.php просто спит на секунду и возвращает случайное число).Несколько удивительно, что он выполняется синхронно и занимает около 20 секунд.
$(document).ready(function () {
$([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]).each(function() {
var number = this;
$.get("rand.php", function(data) {
$('#'+number).html(data);
});
});
});
Код PHP выглядит следующим образом:
<?php
sleep(1);
echo rand();
?>
Я думал, что это явно неправильно, поскольку асинхронные вызовыНе должно быть никаких блокировок и возврат почти параллельно.После долгих тренировок (предполагая, что это проблема с сервером), я обнаружил, что добавление чего-либо к URL-адресу, чтобы он выглядел иначе, работало, как и ожидалось.То есть он возвращается через 3 секунды или около того (6 или около того вызовов одновременно).
$(document).ready(function () {
$([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]).each(function() {
var number = this;
$.get("rand.php?"+number, function(data) {
$('#'+number).html(data);
});
});
});
Я не думаю, что гуру jQuery / Javascript может объяснить это поведение?Это какое-то ограничение браузера?Почему только когда URL-адреса отличаются, он работает так, как я ожидал?
РЕДАКТИРОВАТЬ - Вместо того, чтобы отвечать, он использовал Chrome (каким бы он ни был последним) и Firefox 5 /6.Я попробовал это в IE, который кешировал его, поэтому проигнорировал это и сосредоточился на Chrome.Интересно, что первый работает, как и ожидалось, в IE9 при загрузке первой страницы, но затем просто отображает кэшированные результаты при перезагрузке.