Интересно, почему мои jQuery
$ajax(...)
вызовы не выполняются параллельно.Следующий код используется в проекте Symfony 2.8:
// Simple Controller to handle the request...
class TestController extends Controller {
public function testOneAction() {
$this->log('Test 1 started');
sleep(10);
$this->log('Test 1 complete');
return new Response('TestOne', Response::HTTP_OK);
}
public function testTwoAction() {
$this->log('Test 2 started');
sleep(5);
$this->log('Test 2 complete');
return new Response('TestTwo', Response::HTTP_OK);
}
}
// jQuery whin Twig Template of TestPage
...
<script>
$( document ).ready(function() {
var start = new Date().getTime();
$.ajax({
url : '{{ path('route_testone') }}',
type : "post",
data : 'test1',
dataType : "text",
context : this,
success : function(data) {
console.log('Test 1 Success: ' + data);
var end = new Date().getTime();
console.log(' ' + (end - start));
}
});
$.ajax({
url : '{{ path('app_testtwo') }}',
type : "post",
data : 'test2',
dataType : "text",
context : this,
success : function(data) {
console.log('Test 2 Success: ' + data);
var end = new Date().getTime();
console.log(' ' + (end - start));
}
});
console.log('Ajax fired');
});
</script>
Я ожидал бы следующий результат: Запрос 1 запущен и запрос 2 запущен.Запрос 2 выполняется первым через 5 секунд, а запрос 1 следует через 10 секунд всего .
// JS console:
Ajax fired
Test 2 Success: TestTwo
5288
Test 1 Success: TestOne
10515
// Symfony log:
Test 1 started
Test 2 started
Test 2 complete
Test 1 complete
Вместо этого я получаю следующий результат: Заказиз двух запросов является случайным.Какой из запросов начинается первым и завершается первым.Общее время выполнения составляет SUM двух вызовов, около 15 секунд.
// JS console:
Ajax fired
Test 1 Success: TestOne
10413
Test 1 Success: TestTwo
15897
// Symfony log:
Test 1 started
Test 1 complete
Test 2 started
Test 2 complete
Это означает, что два запроса обрабатываются не параллельно, а последовательно.Это сбивает с толку, поскольку в отношении jQuery Docs вызовы AJAX должны обрабатываться асинхронно по умолчанию:
По умолчанию все запросы отправляются асинхронно (т. Е. По умолчанию установлено значение true).Если вам нужны синхронные запросы, установите для этого параметра значение false.Междоменные запросы и dataType: запросы «jsonp» не поддерживают синхронную работу.Обратите внимание, что синхронные запросы могут временно блокировать браузер, отключая любые действия, когда запрос активен.
Я не использую ни async:false
, ни dataType: "jsonp"
и не выполняю междоменные запросы.
Так почему эти вызовы не обрабатываются параллельно?