JQuery AJAX не поддерживает порядок массива - PullRequest
0 голосов
/ 28 мая 2019

Я конвертирую разделенную запятыми строку идентификаторов и запускаю каждый из них с помощью простого вызова WordPress ajax. Вот так ....

JS

ids = '575,570,579';

var ids_array = ids.split(',');

ids_array.forEach(function(ids_array_item) {

    $.ajax({
        type   : 'POST',
        url    : 'myurl',
        data   : {
            action   : 'get_custom_content',
            customid : ids_array_item
        },
        success : function( response ) {

            if (response != '') {

                console.log('response : ' + response);

            }

        }

    });

});

PHP

add_action('wp_ajax_get_custom_content', 'get_custom_content');
add_action('wp_ajax_nopriv_get_custom_content', 'get_custom_content');
function get_custom_content() {

    $customid = $_POST['customid'];
    echo $customid;
    die();

}

Я ожидаю получить это обратно ...

response : 575
response : 570
response : 579

Но я получаю это вместо ...

response : 575
response : 579
response : 570

Кто-нибудь имеет представление о том, почему ордер искажается, когда он выполняется через вызов ajax?

1 Ответ

3 голосов
/ 28 мая 2019

Ajax является асинхронным. Несколько HTTP-запросов к одной и той же конечной точке не гарантируют получение ответов в том же порядке, в котором они были отправлены.

Если порядок имеет значение, то дождитесь, пока все ответы будут собраны (поместив обещание, возвращенное $.ajax в Promise.all), прежде чем зацикливать их и регистрировать их.

В качестве альтернативы, напишите конечную точку HTTP, которая может принимать несколько идентификаторов за один раз, и вернуть массив результатов.

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