2009-06-05 4 views
0

Я ищу информацию о том, как сложно будет проходить через несколько результатов из базы данных с помощью jquery. Я уже нашел плагин, но я не думаю, что это то, что мне нужно.paging через результаты базы данных с помощью jquery

У меня есть форма с 8 текстовыми полями. Я хочу заполнить эти 8 текстовых полей первым результатом базы данных, а затем показать подкачку, если есть больше результатов. Если результатов больше, пользователь должен иметь возможность щелкнуть следующую кнопку, чтобы импортировать новые данные в текстовые поля.

У кого-нибудь есть предложения?

+0

вы хотите, чтобы следующая кнопка для запроса базы данных (через AJAX) для следующей страницы или пролистывать результаты первого запроса, которые уже находятся в DOM/JSON/XML где-то делать? –

+0

Hi Mercilor. Спасибо за помощь. Для меня это не имеет значения. Там никогда не будет больше, чем сказать 5 строк, возвращенных в общей сложности, поэтому я не беспокоюсь о производительности в этом случае. – user109162

ответ

0

Вы не указали, какую базовую платформу вы используете. Это ASP.NET MVC? Рубин на рельсах? Поддержка пейджинга, как правило, встроена в базовую платформу.

Если вы хотите сделать вызов AJAX или JSON, то jQuery, безусловно, способен это сделать, но, как выглядит этот вызов, будет зависеть от того, какую платформу вы используете.

Если это рубин, вы должны найти некоторые рекомендации здесь: http://www.sitepoint.com/article/ajax-jquery/

+0

Спасибо, Роберт. Я использую PHP. Проблема, которую я вижу, в том, что php требует обновления, чтобы получить текущее смещение, и я застрял там. Не знаю, как это сделать. – user109162

+0

Попробуйте здесь: http://www.sitepoint.com/article/ajax-jquery/ –

+0

Роберт, спасибо! Это фантастическое чтение! Иду там сейчас .. – user109162

0

Способ сделать это (или как я это делаю), что я связываю Ajax звонки на постраничной ссылки. Ссылки имеют встроенный url и знают, на какой странице они ссылаются.

например.

<a class="pager" href="/ajax_pages/get_results.php?page=3"> 3 </a> 

Теперь вы можете перехватывать щелчки по этим ссылкам, используя Jquery живую функцию

$(function() { 
     $('a.pager').live('click',function() { 
      var url = $(this).attr('href'); 
      $('#destination').load(url); 
     } 
} 

Поскольку вы используете «вживую», вы не должны связывать вновь сгенерированный HTML вручную. И поэтому ваши ссылки будут готовы к прямо сейчас.

Затем все, что вам нужно сделать, это сгенерировать значение смещения на основе запрошенной страницы и лимита (который должен знать ваш серверный сервис).

Альтернативный метод очень близок, но требует больше работы в javascript. Имейте службу, которую ваш пейджер вызывает, возвращает json закодированные данные. Затем ваша функция обратного вызова должна заполнить вашу страницу этими данными, а затем обновить ссылки для разбивки на страницы, чтобы они работали правильно.

Это может быть более элегантное решение, чем выдувание всей формы каждый раз, но требует больше работы. Маловероятно, что это будет заметная разница.

+0

Привет Rhinosaurus. Спасибо за ответ.Извините, я не ответил раньше, чтобы сказать спасибо, но я был болото. Я дам этому вихрь. Еще раз спасибо! – user109162

0

Лично, если бы я знал, что у меня никогда не будет более 5 страниц или около того, я бы вообще отказался от Ajax ... Не то, чтобы мне это не понравилось ... Я просто не думаю его необходимо в этом случае.

<?php 
// Example Database result (say, 2 "pages" worth)... 
// We'll pretend the cells in your database match the textarea names... 
$results = array(
    [0] => array(
     'textbox1'=>'abc', 
     'textbox2'=>'def', 
     'textbox3'=>'ghi', 
     'textbox4'=>'jkl', 
     'textbox5'=>'mno', 
     'textbox6'=>'pqr' 
     'textbox6'=>'stu' 
     'textbox6'=>'vwx' 
    ), 
    [1] => array(
     'textbox1'=>'cba', 
     'textbox2'=>'fed', 
     'textbox3'=>'ihg', 
     'textbox4'=>'lkj', 
     'textbox5'=>'onm', 
     'textbox6'=>'rqp' 
     'textbox6'=>'uts' 
     'textbox6'=>'xwv' 
    ) 
) 
$json_results = json_encode($results); 
?> 

<!-- Generate some jQuery and HTML --> 
<script language="javascript"> 
    var pages = eval('<?=$json_results;?>'); 
    $(function() { 
     $('.page_num').live('click',function() { 
      var page = $(this).attr('rel'); 
      if(pages[page] && pages[page].length > 0) { 
       $.each(pages[page],function(key,value) { 
        // assuming your key names are the same as the 
        // names of your textareas 
        $('textarea[name="'+key+'"]').value(value); 
       }); 
      } else { 
       alert("Oops, that page doesn't exist for some reason..."); 
      } 
     }); 
    }); 
</script> 

<?php foreach($results[0] as $key=>$value): ?> 
<textarea name="<?=$key?>"><?=$value;?></textarea> 
<?php endforeach; ?> 

<div id="page_nums"> 
<?php for($i=1;$i<=sizeof($results)-1;$i++): ?> 
<a class="page_num" href="#" rel="<?=$i;?>"><?=$i;?></a> 
<?php endfor; ?> 
+0

Привет, Кайл. Большое спасибо за Ваш ответ. Мне жаль, что у меня не было возможности поблагодарить вас раньше, но я был завален. Я попробую это предложение и дам вам знать, как это работает. – user109162

+0

Эй, Кайл, я возился с твоим примером. Во-первых, спасибо за пример кода. Поскольку у меня практически нет опыта JQ, что бы я никогда не делал, я бы хотел убедиться, что я понимаю код, который вы опубликовали, прежде чем я начну вкладывать в него много времени, чтобы узнать, что он не будет делать то, что я нужно это. Для меня, php-массив, который у вас есть. Можете ли вы сказать мне, как именно это должно работать? Я имею в виду, у меня есть одна html-страница с 8 текстовыми полями. Каждое текстовое поле имеет другой идентификатор. В вашем php-массиве, который является идентификатором? Ключ или значение в массиве? – user109162

+0

Что мне нужно сделать, так это перейти через разные записи. Одна запись заполняет все 8 текстовых полей. Затем пользователь может щелкнуть ссылку для прокрутки, чтобы перейти к следующей записи. Текстовые поля html не должны динамически добавляться, а только данные, импортированные в текстовые поля. Так ли этот код должен работать? – user109162