Мой AJAX занимает слишком много времени для цикла, вызывающего PHP-файл - PullRequest
0 голосов
/ 02 января 2019

Мой Ajax занимает слишком много времени при загрузке, я звоню ajax от 1 до 3000 Он попадает в базу данных и получает, если значение существует в базе данных от 1 до 3000, то он вернет Вот мой код

function Getdata(e) {
  e = e;
  jQuery.ajax({
    type: "GET",
    async: true,
    url: "getdata.php",
    data: "id=" + e,
    success: function(t) {
      jQuery(".reult_get_wish-" + e).html(t.htmltext)
    },
    dataType: "json"
  })
} 

for (var e = 1; e <= 3000; e++) {
  Getdata(e);
}

Вот мой getdata.php код файла

$id = $_GET['id'];
$sql = "SELECT * from wishing_report where user = '".$id."'";
$result = $mysqli->query($sql);
if ($e = $result->fetch_array(MYSQLI_ASSOC))
{
  echo json_encode($e);
}

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Ваш Ajax отнимает много времени, потому что вы запускаете его 3000 раз.Чтобы не вызывать его много раз, я рекомендую поместить все идентификаторы в массив.Я хотел бы сделать что-то вроде этого.

JavaScript:

function Getdata(e) {
  e = e;
  jQuery.ajax({
    type: "POST",
    async: true,
    url: "getdata.php",
    data: {id: e},
    success: function(t) {
        $.each(t, function() {
            $.each(this, function(k, v) {
                jQuery(".reult_get_wish-" + v).html(v.htmltext);
            });
        });
    },
    dataType: "json"
  })
}

var arr = [];
for (var e = 1; e <= 3000; e++) {
    arr.push(e);
}

Getdata(arr);

PHP:

$id = $_POST['id'];
$sql = "SELECT * from wishing_report where user IN ('".implode(',', $id)."')";
$result = $mysqli->query($sql);
if ($e = $result->fetch_array(MYSQLI_ASSOC))
{
  echo json_encode($e);
} 
0 голосов
/ 02 января 2019

Разъяснения

Если это занимает некоторое время, почему бы не использовать асинхронный подход, при котором вы можете обрабатывать сумму 'x' за раз, то есть вы можете использовать setTimeout и рекурсию или setInterval, просто чтобы вы могли обработать блок информация / данные за один раз.

В этом примере вы можете видеть, что есть функция onIterate и функция onComplete, оба они используются в разных сценариях, вы можете использовать функцию onIterate для каждой итерации до iterate функция завершена. Как только вы выполните итерацию, вы можете запустить функцию onComplete и можете вносить любые изменения, которые вам нравятся, например, обещания или что-то еще, что вам нравится.

Это также может быть лучшим подходом для сервера, поскольку вы позволяете времени сервера восстановиться после последнего запроса. В качестве альтернативы вы можете изменить свой внутренний код, чтобы он был более эффективным и т. Д., Вы могли бы использовать некоторые параметры limit и offset в своем запросе, чтобы сервер не обрабатывал слишком слишком данные за один раз.

// A function to fire when the ajax request has finished.
const onSuccess = data => {
  console.log(data);
};

// Simulate the ajax request.
const getData = (i, callback) => {
  setTimeout(() => {
    console.log(i);
    return callback(i);
  }, 500);
}

// A function to fire once complete.
const onComplete = () => console.log('Finished');

// A function to fire if it's not finished/complete. 
const onIterate = () => console.log('NOT finished yet');

// A function to iterate, break the loop up into chuncks. 
const iterate = (start, end, delay) => {
  const process = data => {
    iterate(++start, end, delay)

    if (start > end) {
      onComplete(data);
    } else {
      onIterate(data);
    }
  };

  if (start <= end) {
    setTimeout(() => {
      getData(start, process);
    }, delay);
  }
};

// A starting point. 
const start = () => iterate(0, 10, 1500);

// Just start the function. 
start();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...