Я преобразовываю разделенную запятыми строку идентификаторов и запускаю каждый из них с помощью простого вызова 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.info('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?
Ajax асинхронный. Не гарантируется, что несколько HTTP-запросов к одной и той же конечной точке получат ответы в том же порядке, в котором были отправлены запросы.
Если порядок имеет значение, подождите, пока все ответы не будут собраны (поместив обещание, возвращенное $.ajax
, в Promise.all
), прежде чем перебирать их и записывать в журнал.
В качестве альтернативы напишите конечную точку HTTP, которая может принимать несколько идентификаторов за один раз и возвращать массив результатов.