Как выполнять простые вызовы JQuery AJAX параллельно в Symfony / Twig? - PullRequest
0 голосов
/ 24 августа 2018

Интересно, почему мои 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" и не выполняю междоменные запросы.

Так почему эти вызовы не обрабатываются параллельно?

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