У меня есть вызов ajax, сделанный с помощью jQuery, примерно так:
$.ajax({ type: "POST", url: ajaxurl, data: data, success: function(response){ alert(response); } });
Я получаю данные от PHP следующим образом:
$data_array = get_data(); foreach($data_array as $data) { echo $data; }
PHP для замедления
Вызов функции данных PHP медленный, потому что он получает очень много данных из базы данных, может получать изображения, делать некоторые звонки json и другие медленные вещи.
Один цикл в то время
Поэтому мне нужно, чтобы PHP-код выполнял один раунд, затем Javascript, а затем выполнял следующий цикл в цикле.
Не один способ решить эту проблему?
Это может быть несколько способов сделать это. Какой из них предпочтительнее? На ум приходит Javascript foreach-loop, JSON и глобальные переменные Javascript.
Вы можете установить тип возврата в своей функции ajax как xml или json, а затем вернуть массив в любом из этих типов. Я чувствую, что JSON является предпочтительным для вашего решения.
Я немного против хранения фактических изображений в базе данных. Я предпочитаю только сохранить для них уникальную ссылку, а затем вернуть это вместо фактического изображения. Это ускорит запрос до справедливой. Я согласен с mad_programmer, что JSON js будет предпочтительнее для вашей ситуации.
Вы можете манипулировать своим запросом, чтобы сделать ограничение. Итак, что-то вроде:
var total_count = ajax_get_sql('select statement with count'); var curr_count = 0; var set_number = 10; var select_statement_without_limit = 'statement'; setTimeout('fetch_data()',0); ... function fetch_data() { if(curr_count < total_count) { ajax_get_sql(select_statement_without_limit with limit appended); curr_count = curr_count + set_number; setTimeout('fetch_data()',0); } }
При всех ваших вызовах ajax установлено ожидание ответа вместо продолжения. Я бы сохранил логику sql в PHP, но использую javascript для запроса сервера много раз. Это не даст вашему JS-скрипту давать длительные ошибки выполнения. Я действительно не принимал во внимание манипуляции с данными, но вы, вероятно, можете это понять!