Member 14093672 Ответов: 1

Ajax, jquery, PHP загружают данные в итерации


Вопрос, связанный с AJAX/PHP, есть ли способ перечислить 5000 записей одновременно, а затем добавить следующие 5000 записей в таблицу HTML и так далее до конца записей с помощью ajax - php



Загрузите скрипт по нажатию HTML-кнопки: или document.ready (), а также покажите индикатор выполнения.

Что я уже пробовал:

// counter that allows you to get a new set of rows
var step = 0;
// set variable if you want to restrict the number of rows will be loaded
var maxStep = 0;//
// how many rows should be returned
var count = 5000;
// if the cancel button is pressed
var cancel = false;

$(function() {

    $('#load').click(function(){

        getData();
    })

    $('#cancel').click(function(){
        cancel = true;
    })
});

function getData()
{
    step++;

    //If cancel variable is set to true stop new calls
    if(cancel == true) return;
    // checks if the variable is set and limits how many rows to be fetched
    if(maxStep >0 and step >= maxStep) return;


    $.post('ajax.php'
        ,{
            'step':step,
            'count':count,
        }
        ,function(data, textStatus, jqXHR){   

		if(textStatus == "success")
                 foreach ($data as $row) {
          echo $row['username']." -- ID :" .$row['user_id']. " -- FirstName :" .$row['first_name']. "<br>\n";
		}
		if(textStatus == "error")
      alert("Error: " + jqXHR.status + ": " + jqXHR.statusText);
		       
	
             // when it finishes processing the data, call back function
             getData();

        }
        ,'json'
    )       
}

==== ajax.php  =====


step = 0;
if(isset($_POST['step'])) $step = (int)$_POST['step'];

$count = 0;
if(isset($_POST['count'])) $count = (int)$_POST['count'];



if($step>0 and $count>0)
{
    $offset = ($step-1) * $count;        
    $limit = $offset.','.$count;

    // --------------        
    // your code here
    // --------------
  
  $data = $DB->query("SELECT * FROM user_details LIMIT .$limit")->fetchAll();
    $result = mysql_query($sql);
    $arr_result = array();
  foreach ($data as $row) {
           $arr_result[] = $row;
        }
   
    $arr_result_enc = json_encode($arr_result);
    echo $arr_result_enc;

    // echo rows
    //echo json_encode($rows);        
}

MadMyche

Пожалуйста, используйте Improve Question виджет и обернуть ваши блоки кода в блоки кода, что делает его намного легче читать. Также переместите свои "комментарии" в блок

Member 14093672

Сделано

Richard Deeming

Серьезно? Кто на самом деле собирается прокручивать 5000 записей за один раз, пытаясь найти ту, которую они хотят? Не говоря уже о бесконечном скроллере с размером страницы 5000.

Если пользователь может проверять одну запись в секунду, ему потребуется почти 90 минут, чтобы просмотреть одну страницу результатов. И это при условии, что им не нужно уходить на "перерыв комфорта" или даже моргать.

Предоставьте своим пользователям инструменты для поиска нужной им информации без необходимости прокручивать такой огромный список. Либо позвольте им искать или фильтровать данные, либо покажите им сводку.

Member 14093672

Серьезно, это своего рода требование, я могу рассмотреть возможность загрузки 1000 записей одновременно, @Richard вы знаете, что я делаю неправильно в своем сценарии. не могли бы вы предложить внести изменения в мой сценарий?

1 Ответов

Рейтинг:
10

MadMyche

То, что вы ищете, называется infinite scroll, и легко поддается поиску. Попробуйте сравнить примеры PHP с вашим кодом и посмотреть, как они выстраиваются.


Member 14093672

У меня были проблемы с обновлением, теперь я думаю, что это выглядит приемлемо. Я новичок на этом сайте, надеюсь, что мое форматирование будет постепенно улучшаться по мере накопления знаний о кодировании Mt. Любая помощь будет высоко оценена.