2017-11-25 3 views
0

Ich möchte das Ergebnis dieser Art von Datenliste retrive mit CakePHP 3Ajax wählen Liste

<?= $this->Form->select('notif_message', 
    [ 'oui' => 'oui', 'non' => 'non'], array('id' => 'notifmess')); ?> 
<?= $this->Form->hidden('notifmessage', ['value' => $notif_message]) ;?> 

Das Ziel ist es, wenn ein Benutzer einen Wert chosse, einen Ajax-Aufruf an diesen Controller

public function notifmessage() // mise à jour des paramètres de notifications 0 = non, 1 = oui 
{ 

    if ($this->request->is('ajax')) { 

    $notifmessage = $this->request->data('notifmessage'); 

    if($notifmessage == 'oui') 
    { 
     $new_notif_message = 'non'; 
    } 
    else 
    { 
     $new_notif_message = 'oui'; 
    } 

    $query = $this->Settings->query() 
         ->update() 
         ->set(['notif_message' => $new_notif_message]) 
         ->where(['user_id' => $this->Auth->user('username') ])        
         ->execute(); 

    $this->response->body($new_notif_message); 
    return $this->response; 

    } 
} 
erfolgen

Und ich möchte diesen Aufruf in Ajax tun, ohne nachzuladen, habe ich dieses Skript

<script type="text/javascript"> 
$(document).ready(function() { 
    $('.notif_message').change(function(){ 
     $.ajax({ 
      type: 'POST', 
      url: '/settings-notif_message', 
      data: 'select.notif_message' + val, 
      success: function(data) { 
       alert('ok'); 
      }, 
      error: function(data) { 
       alert('fail'); 
      } 
     }); 
    }); 
}); 
</script> 

er nicht nichts h funktioniert, anhängen, aber ich weiß nicht, warum, ich, keine Nachricht in Log habe ich ohne Angabe nicht debuggen können, was nicht

Dank

+0

Welche Werte werden für das ausgewählte Element generiert, da dies die Werte sind, mit denen Sie arbeiten müssen. – jeff

Antwort

0

In yout javascript Sie verwenden sollten $('#notifmess').change(… oder $('[notif_message]').change(… nicht funktioniert anstelle von $('.notif_message').change(….
In CakePHP wird das erste Argument der select-Methode als name-Attribut des select-Tags verwendet.

Aktualisierung: In Ihrer Steuerung rufen Sie den Wert $_POST['notifmessage'] ab, was der Name des ausgeblendeten Eingabefeldes ist. Um die Auswahl des Benutzers erhalten Sie entweder $this->request->data('notif_message'); in der Steuerung verwendet werden sollen, oder das Ajax-Request Einrichtung, die Daten mit notifmessage wie so senden:

$('[name="notif_message"]').change(function(){ 
    $.ajax({ 
     type: 'POST', 
     url: '/settings-notif_message', 
     data: {'notifmessage' : this.value}, 
     success: function(data) { 
      // To change selected value to the one got from the server 
      $('#notifmess').val(data); 

      alert('ok'); 
     }, 
     error: function(data) { 
      alert('fail'); 
     } 
    }); 
}); 

(Wo in diesem Fall this zu < wählt Bezug wird > Tag .)

+0

großer Vorschlag!, Ich habe den Ajax Call, aber der Rest meines Ziels funktioniert nicht richtig: Das Update in der Datenbank ist nicht effektiv und ich möchte, dass die 'oui' oder 'non' in meiner Ansicht gespeichert werden, ich didn ' t in CakePHP 3 Dokumente gefunden, wie man ein 'ausgewählt' y Standard – christ57

+0

ich habe immer 'oui', egal was ich wähle ich habe immer 'oui', es ist etwas falsch in der Steuerung ich denke – christ57

+0

@ christ57 Ich habe aktualisiert die Antwort auf die Parameternamen. – dferenc

0

i zum Erfolg der Nähe bin: mein ajax-Aufruf funktioniert, wird Datenbank-Update funktioniert, i

<script type="text/javascript"> 
$(document).ready(function() { 
$('#notifmess').change(function(){ 
    var id = $('#notifmess').val(); 
    $.ajax({ 
      type: 'POST', 
      url: '/instatux/settings-notif_message', 
      data: {'id' : id}, 
       success: function(data){ 
    $('#notifmess option[value="'+data.id+'"]').prop('selected', true); 

}, 
error: function(data) 
{ 
    alert('fail'); 
} 

    }); 
}); 
mit diesem jQuery-Code juste müssen die ‚ausgewählt‘ zu den anderen setzen und versuchen, ich bin 0

});