Issue
javascript:
var numbers = [0, 1, 3, 5];
for (let k = 0; k < numbers.length; k++) {
let x = numbers[k]
l = $.ajax({
type: 'GET',
url: 'body.php',
data: {'x': x},
contentType: 'application/json; charset=utf-8',
}).then(function(res) {
$("#products").append(res);
})
}
php:
<?php
session_start();
$x = $_GET['x'];
?>
<h5><?php echo $produkt;?></h5>
And it appends it everytime in different order, for example 0 3 1 5 or 1 5 0 3 etc. but when I add to javascript alert(), it goes in right order every time.
Solution
Because it is asynchronous. You can create an array of all of the promises and then use Promise.all
to get them in order:
// Just a fake jquery ajax that returns promises
let $ = {
ajax(props) {
return new Promise((resolve) => setTimeout(() => resolve(`<h5>${props.data.x}</h5>`), Math.floor(Math.random() * 500)));
}
}
var numbers = [0, 1, 3, 5];
const p = numbers.map((x) => {
return $.ajax({
type: 'GET',
url: 'body.php',
data: {'x': x},
contentType: 'application/json; charset=utf-8',
})
});
Promise.all(p).then((responses) => {
responses.forEach((response) => {
document.getElementById('products').innerHTML += response;
});
});
<div id="products" />
Answered By - dave Answer Checked By - Gilberto Lyons (PHPFixing Admin)
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.