jQuery ajax不保持数组顺序

时间:2019-05-28 11:06:47

标签: javascript jquery ajax wordpress

我正在转换一个用逗号分隔的id字符串,并通过一个简单的WordPress ajax调用运行每个ID。像这样...

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 个答案:

答案 0 :(得分:3)

Ajax是异步的。不能保证对同一终结点的多个HTTP请求以与发送请求相同的顺序获得响应。

如果顺序很重要,那么请等到所有响应都收集起来(通过将$.ajax返回的诺言放入Promise.all中)之后,再遍历它们并记录下来。

或者,编写一个HTTP端点,该端点可以一次性获取多个ID,然后返回结果数组。