2016-11-22 6 views
0

vielleicht kann mir jemand helfen, meinen Fehler zu finden.jquery Anrufe an CakePHP 3 Controller

In CakePHP möchte ich die jquery Autocomplete verwenden, und wenn Benutzer eine Wertprüfung mit dem Controller auswählt, wenn ein neuer Wert in der Datenbank gespeichert werden soll oder nicht.

hier ist der Code für die Ansicht

<?php  
echo $this->Form->input('Name', array(
    'label' => 'Anbieter', 
    'empty' => true, 
    'required' => 'required', 
    'templates' => array(
     'inputContainer' => '{{content}}', 
    ), 
    'class' => 'select anbieter', 
    'id' => 'Anbieter' 
)); 

und Skript

<script> 
jQuery('#Anbieter').autocomplete({ 
    source:'<?php echo Cake\Routing\Router::url(array('controller' => 'Anbieter', 'action' => 'getAll')); ?>', 
    minLength: 0, 
    autoFill: false, 
    select: function(event, ui) { 
     $.ajax({ 
      url: '<?php echo Cake\Routing\Router::url(array('controller' => 'Anbieter', 'action' => 'addCreate')); ?>', 
      success: function(event, ui){ 
       console.log(ui); 
      }, 
      error: function(event, ui){ 
       console.log(ui); 
      } 
     }); 
    } 
}); 

in-Controller Ich habe diese

public function add() 
{ 
    $this->viewBuilder()->layout('other'); 
    $anbieter = $this->Anbieter->newEntity(); 
    if ($this->request->is('post')) { 
     $anbieter = $this->Anbieter->patchEntity($anbieter, $this->request->data); 
     if ($this->Anbieter->save($anbieter)) { 
      $this->Flash->success(__('The anbieter has been saved.')); 
      return $this->redirect(['action' => 'index']); 
     } else { 
      $this->Flash->error(__('The anbieter could not be saved. Please, try again.')); 
     } 
    } 
    $this->set(compact('anbieter')); 
    $this->set('_serialize', ['anbieter']); 
} 

public function addCreate() 
{ 
    if($this->request->is('ajax')){ 
     // do nothing for now 
    } 

} 

dies nur Dummy-Code ist, so wenden Sie sich bitte sei nicht wählerisch ut it;)

mein Problem ist, wenn ich Code oben verwenden, werde ich einen Internal Server Error, aber wenn ich

ändern
url: '<?php echo Cake\Routing\Router::url(array('controller' => 'Anbieter', 'action' => 'addCreate')); ?>' 

zu

url: '<?php echo Cake\Routing\Router::url(array('controller' => 'Anbieter', 'action' => 'add')); ?>', 

alles funktioniert gut. .. aber das ist nicht was ich will, also was fehlt mir?

vielen dank advanced

l.b.

edit: Fehler toolbar.js: 90 GET http://localhost/anbieter/add-create 500 (Internal Server Error)

+2

Wenn immer Fehler empfangen werden, posten Sie immer ** den _complete_ Fehler **, das heißt, einschließlich ** _full_ stacktrace ** (idealerweise kopiert aus den Protokollen, wo es in einer gut lesbaren Weise verfügbar ist), auch wenn das Problem könnte für Leute offensichtlich sein, die mit CakePHP vertraut sind! Zeigen/beschreiben Sie auch den richtigen Kontext, dh zeigen/markieren Sie den Code, der den Fehler auslöst, und erwähnen Sie immer Ihre _exact_ CakePHP-Version - danke! – ndm

Antwort

0

Regel Nummer 2 von Ajax: Rückkehr etwas von der ajaxed Seite

if($this->request->is('ajax')){ 
     return json_encode(['message'=>'Sucess']) 
    } 
+0

hey danke, habe das versucht und viele verschiedene Sachen ... immer noch nicht funktioniert, lustig genug, auch wenn ich die Sachen von add to addCreate es funktioniert nicht, ich denke, ich vermisse etwas woanders. Gibt es irgendwo in CakePhp Prototypenfunktionen? –

+0

Controller-Aktionen können nur '\ Cake \ Network \ Response'-Instanzen oder' null' zurückgeben. – ndm

+0

ist die CakePHP Route korrekt, wie sieht dein xhr Wunschkörper aus? – madalinivascu

0

Sie brauchen etwas zu setzen um Variablen in Ihrer Controller-Aktion anzuzeigen:

$this->set('results', ['foo' => 'bar'])); 
$this->set('_serialize', 'results'); 
+0

wie ich unten erwähnt, auch wenn ich c/p den Code von add to addCreate (mit oder ohne autoRender = false) gewann arbeite nicht. –

+0

Konnten Sie Ihren Fehler, den Sie erhielten, und error.log posten – makallio85

0

vielen Dank Ihnen allen.

scheint es mit dem älteren CakePHP ein Problem gewesen zu sein (3.2.?)

ich jetzt 3.3.9 aktualisiert und alles funktioniert gut.