Chào mn, em đang làm 1 form gửi request = ajax. cơ chế kiểu:
-
người dùng nhập dữ liệu vào 1 textareaa, tách thành mảng bởi dấu xuống dòng \n. Ví dụ:
a
b
c
=> được arrayZ [a,b,c] -
dùng vòng lặp duyệt mảng này, ajax post element đầu tiên ( là a) lên 1 url để xử lí, url này lại trả về 1 arrayX .
-
duyệt tiếp arrayX vừa trả về. sau khi xử lí xong toàn bộ element trong arrayX này thì duyệt tiếp element tiếp theo của arrayZ mà người dùng nhập (là b) …
em có viết code như dưới, nhưng nó ra kq ko như mong đợi.
c => 1
b => 1
a => 1
c => 2
b => 2
a => 2
c => 3
b => 3
a => 3
code phía dưới em fix cứng hết giá trị người dùng nhập và data ajax trả về để test luôn ạ. mn click vào button “Click” là dc ah
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<style>
#token{border:1px solid red;}
#result{border:1px solid green;}
</style>
</head>
<body>
<textarea id="token" rows="5"></textarea>
<br />
<button id="click">
Click
</button>
<br />
<textarea id="result" rows="10" ></textarea>
<br />
<button id="done" style="display:none">Done</button>
<script>
$('#click').click(function(){
var token = ['a', 'b', 'c'];
$.each(token, function(index, item){
$.ajax({
url: 'https://sv.hacklike.me/api/bot/service.php', //url test, dont care
method: 'POST',
data: {}
}).done(function(result){
// var result = JSON.parse(result);
var result = [1,2,3]; //hard code test
$.each(result, function(_index, _item){
setTimeout(function(){
$('#result').append(item+ ' => '+ _item + "\n");
}, _index * 2000)
})
})
})
});
</script>
</body>
</html>
em muốn kết quả là
a => 1,
a => 2,
a => 3,
b => 1,
b => 2,
b => 3
(mỗi dòng show ra sau mỗi 2s)
…
trước giờ nếu code đơn giản thì em hay dùng async: false , nhưng dùng cái này cho nhiều ajax trong vòng lặp thì nó đơ luôn trình duyệt. em tìm thì thêm có nhiều cách , nhưng nhìn khá là khó hiểu, và đa số thấy là bảo sử dụng Promise , search cái này ở jquery thì ra .when() ,.promise(), .deferered() . Và còn có cả async, await. Nhiều thứ quá và em đọc chưa hiểu nên em không biết sử dụng cái nào, a/c nào có kn chỉ giáo cách chuẩn nhất với ạ.