2012-04-13 11 views
2

Ich benutze CakePHP eingebauten Paginator Helfer, und haben ein Problem beim Versuch, dies mit Ajax zu integrieren.CakePHP Paginator mit Ajax - Ajax Anrufe werden nicht

Die eigentliche Paginator (was das ist):

echo $this->Paginator->prev('« Previous', null, null, array('class' => 'disabled')); 

echo $this->Paginator->next('Next »', null, null, array('class' => 'disabled')); 

Works und funktioniert gut. Es bewirkt jedoch, dass die Seite neu geladen wird, was ich nicht wirklich möchte. Mit Hilfe der Dokumentation, die es den folgenden Code zu verwenden:

$this->Paginator->options(array(
    'update' => '#testtable', // This is the name of the table to be refreshed 
    'evalScripts' => true 
)); 

Aber, wenn ich auf die Links klicken, um es noch neu lädt nur die Seite. Es ignoriert die eingestellten Optionen vollständig. JQuery kann auf der Seite aufgerufen werden, da andere Ajax-Aufrufe auf derselben Seite aufgerufen werden. Ich habe Mühe, darüber nachzudenken, was sonst noch falsch ist.

+0

loswerden können Sie ein ausführlicher Code Beispiel? (speziell was auf der Ergebnisseite gerendert wird?) Wenn Sie es nicht in Kuchen herausfinden können, können Sie das Problem in Javascript leicht abfangen und korrigieren :) – Ryan

+0

fügen Sie bitte Ihren Javascript-Code hinzu, der für Datentabelle verwendet wird, denke ich, dass das hilfreich sein wird zum Debuggen. – Saanch

+0

@Ryan - Ich werde es bald aktualisieren, obwohl keine Fehler angegeben sind. – mickburkejnr

Antwort

0

Fügen Sie das folgende Skript in Ihrer Ansicht Datei oder Layout-Datei und versuchen

jQuery(document).ready(function() { 
    jQuery('#example').dataTable({ 
    "sPaginationType": "full_numbers", 
    "bProcessing": true, 
    "bServerSide": true, 
    "sAjaxSource": src="<?= $this->base;?>/controller/action/<?=$dataId;?>",  
}); 

Dies kann die Ajax-Funktionalität der Paginierung hinzuzufügen.

Ich würde Ihnen empfehlen, die CakePHP-Plugin Cakephp-DataTable

Dieses Plugin die Paginierung implementiert und hat standardmäßig der Features die meisten hat zu verwenden. Sie haben auch Dokumentation zur Verfügung gestellt und wenn Sie Schwierigkeiten bei der Implementierung finden, gehen Sie bitte durch die issues section

Auch der Entwickler ist sehr reaktionsschnell und kann Klärungen für dieses Plugin erhalten, wenn Sie welche haben.

0

Ich laufe auf das gleiche Problem vor. Was ich tat, war, meine eigene jquery Bindungsfunktion stattdessen zu verursachen. Ich werde die $this->Paginator->options()

 $('.prev a, .next a').bind('click', function(event){ 
     event.preventDefault(); 

     var url_link = $(this).attr('href'); 
     $.ajax ({ async:true, 
      beforeSend: function (XMLHttpRequest) {$("#busy-indicator").fadeIn();}, 
      complete: function (XMLHttpRequest, textStatus) {$("#busy-indicator").fadeOut();}, 
      dataType: "html", evalScripts:true, 
      success: function (data, textStatus) { 
       $("#testtable").empty().html(data); 
      }, 
      url: url_link}); 
      return false; 

     });   
+0

Wenn Sie ein externes Skript aufrufen, sollte es Ihrer Ansicht nach ungefähr so ​​aussehen. ' Html-> Skript ('jqueryfile'); ?> 'Bitte beachten Sie, dass Ihr Skript inline und nicht in den Kopf gesetzt werden sollte. – Bob