JQUERY foreach 附加 PHP 脚本乱序
JQUERY foreach appending PHP script out of order
我有这个 ajax 函数,它为数组中的每个项目加载 php 脚本,然后将其附加到 html 标记。问题是脚本乱序附加。如何保持对象的顺序?
jQuery(function($) {
$.getJSON('apiUrl.com', function(response) {
$.each(response.data, function(key, val) {
$.get("phpFile.php", {
id: val.id,
title: val.title,
img_url: val.images.jpg.image_url
}, function(html) {
$("#elementToLoadPhpFile").append(html);
});
});
});
});
您的所有 $.get
请求都被并行调用。这会导致 race 情况,其中订单无法维护。将其视为 先到先得。
为了保持顺序,将每个请求包装在一个 Promise
and collect all these promises in a single array. Pass the array to Promise.all
中以等待所有请求完成。
只要所有请求都完成,您就会得到一个数组,该数组的顺序与所有请求的顺序相同。遍历此数组以将每个请求的值附加到页面。
jQuery(function($) {
$.getJSON('apiUrl.com', function(response) {
const requests = response.data.map(val => new Promise((resolve, reject) => {
$.get("phpFile.php", {
id: val.id,
title: val.title,
img_url: val.images.jpg.image_url
})
.done(html => resolve(html))
.fail((xhr, textStatus, errorThrown) => reject(errorThrown));
}));
Promise.all(requests).then(responses => {
responses.forEach(html => {
$("#elementToLoadPhpFile").append(html);
});
});
});
});
我有这个 ajax 函数,它为数组中的每个项目加载 php 脚本,然后将其附加到 html 标记。问题是脚本乱序附加。如何保持对象的顺序?
jQuery(function($) {
$.getJSON('apiUrl.com', function(response) {
$.each(response.data, function(key, val) {
$.get("phpFile.php", {
id: val.id,
title: val.title,
img_url: val.images.jpg.image_url
}, function(html) {
$("#elementToLoadPhpFile").append(html);
});
});
});
});
您的所有 $.get
请求都被并行调用。这会导致 race 情况,其中订单无法维护。将其视为 先到先得。
为了保持顺序,将每个请求包装在一个 Promise
and collect all these promises in a single array. Pass the array to Promise.all
中以等待所有请求完成。
只要所有请求都完成,您就会得到一个数组,该数组的顺序与所有请求的顺序相同。遍历此数组以将每个请求的值附加到页面。
jQuery(function($) {
$.getJSON('apiUrl.com', function(response) {
const requests = response.data.map(val => new Promise((resolve, reject) => {
$.get("phpFile.php", {
id: val.id,
title: val.title,
img_url: val.images.jpg.image_url
})
.done(html => resolve(html))
.fail((xhr, textStatus, errorThrown) => reject(errorThrown));
}));
Promise.all(requests).then(responses => {
responses.forEach(html => {
$("#elementToLoadPhpFile").append(html);
});
});
});
});