01/10/2018, 14:04

Ajax request in loop?

Chào mọi người ! Hiện tại mình đang làm 1 trang web lấy danh sách thành viên của 1 nhóm mình đang quản lý !
Đây là code của mình :
index.html :
https://pastebin.com/v3Rni9dx
còn đây là file
a.php :

<?php
$token = $_POST['token'];
$idnhom = $_REQUEST['idnhom'];
$ketqua=file_get_contents('https://graph.facebook.com/v2.11/'.$idnhom.'/members?fields=id&limit=2000&access_token='.$token);
echo $ketqua;
?>

b.php :

<?php
$token = $_REQUEST['token'];
$id = $_REQUEST['id'];
    $pageContent=file_get_contents('https://graph.facebook.com/'.$id.'?method=GET&fields=id,name&access_token='.$token);
$parsedJson  = json_decode($pageContent);
echo $parsedJson->name;
?>

Hiện mình đang gặp vấn đề ở chỗ load name của thành viên !
Cụ thể ở đây là mình dùng $.ajax trong vòng lặp for !
Mình biết đặc thù của javascipt là nó không chờ đợi func trả về giá trị !
Mọi người có thể giúp mình làm thế nào để nó request trả về giá trị xong rồi mới chạy lần lập tiếp theo không ạ !
Mình xin cảm ơn !

Nguyen Ca viết 16:14 ngày 01/10/2018

em tìm hiểu callback hoặc promise(es6) cho ajax rong js,
closure để xử lý trong vòng for

for (var i = 0; i < arr.length; i++) {
  (function(i) {
    // do your stuff here
  })(i);
}
Zhang Jike viết 16:19 ngày 01/10/2018

Bạn có thể dùng đệ quy cùng biến đếm để thực hiện việc loop này.

const youFunction = (counter, limit) => {
  if (!counter) counter = 0
  if (counter >= limit) return
  Ajax.request({
    url,
    success: (response) => {
      // do what you need
      counter++
      yourFunction(counter, limit)
    }
  })
}
Nguyễn Thành Phát viết 16:16 ngày 01/10/2018

Hình như nó không hoạt động bạn ơi

                    for (dem = 0; dem < maxid; dem++) {
                        var row = table.insertRow(dem + 1);
                        var cell1 = row.insertCell(0);
                        var cell2 = row.insertCell(1);
                        var cell3 = row.insertCell(2);
                        cell1.innerHTML = dem + 1;

                        (function(dem) {
                            $.ajax({
                                url: 'b.php',
                                method: 'POST',
                                data: {
                                    token: token,
                                    id: arr_id[dem1]
                                }
                            }).done(function(data) {
                                cell2.innerHTML = data;
                            });
                        })(dem);
                        cell3.innerHTML = '<a href="https://facebook.com/' + arr_id[dem] + '"target="_blank">' + 'https://facebook.com/' + arr_id[dem] + '</a>';
                    }

còn đây là kết quả :

Nguyễn Thành Phát viết 16:09 ngày 01/10/2018

Cảm ơn bạn nhiều nha !!

bạn cứu mình rồi
không ngờ sử dụng đệ quy thay cho vòng lặp for nó lại làm theo trình tự :V
cảm ơn nha !

Zhang Jike viết 16:04 ngày 01/10/2018

Thả tim với solutions kìa

Nguyễn Thành Phát viết 16:15 ngày 01/10/2018

xong rồi bác

Bài liên quan
0