2012-04-15 4 views
0

TL; DR: Ich habe Probleme beim Einrichten einer POST mit jQuery und Probleme beim Einrichten meiner Aktion (aka Post-Handler). Könnte mir jemand ein Beispiel, wie ich ein Setup geben die Aktion/Ansicht und wie ich von jQueryWie kann ich einen jQuery-Post in CakePHP erstellen, um Benutzernamen/Passwort zu bearbeiten?


So schreiben würde, habe ich einige Graben um getan, aber ich kann immer noch nicht bekommen es nicht gefunden zu arbeiten und haben worüber ich mir unsicher bin. Also, ich denke, ich habe den Post-Part verloren, aber ich bin mir nicht sicher, wie ich meinen Post-Request-Handler einrichten soll. Genauer gesagt bin ich mir nicht sicher, wie ich die Aktion und die Ansicht des Controllers einrichten soll, damit ich mit einer Nachricht eine richtige Antwort zurückerhalten kann (Erfolg/Fehler/Validiererfehler). Für den Benutzernamen verwende ich eine E-Mail und von dem, was ich in der Dokumentation gelesen habe, solange Sie Ihre id einstellen, dann wird es den Datensatz aktualisieren. Allerdings bekomme ich so seltsame Probleme, da es auch mein Passwort aktualisiert, obwohl es nicht als Teil des jQuery-Posts gesendet wird. Eine andere Sache ist, dass ich bemerkte, obwohl ich in der Lage war, die E-Mail erfolgreich zu aktualisieren, die aktuelle Seite, auf der ich bin, die E-Mail nicht aktualisiert. Ich gehe davon aus, dass ich den Wert nach Überprüfung auf einen Erfolg neu setzen muss. Kann jemand so freundlich sein, mir ein Beispiel zu zeigen?

Hier ist, was ich habe:

Aktion:

public function edit() { 
    $this->autoRender = false; // I am not sure if I need this 
    Configure::write('debug', 0); // I think this disables all the extra debug messages I get with jQuery 
    $this->disableCache(); // No idea why I need this 

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

     $id = $this->Auth->user('id'); 
     // Going to be adding other cases for name/password/etc... 
     switch($this->params->data['post']) { 
      case 'email': 
       $result = $this->updateEmail($this, $id, $this->params->data); 
       break; 

     } 

    } 

} 

private function updateEmail($object, $id=null, $request=null) { 
      // Do I need to re-log them back in after I change their email to create a new session? 
    $object->AccountDetail->User->id = $id; 
    if($object->AccountDetail->User->save($request)) { 
     return $this->Session->setFlash(__('Your email has been updated!')); 
    } else { 
     return $this->Session->setFlash(__($object->AccountDetail->User->validationErrors)); 
    } 
} 

jQuery Beitrag:

$('#email :button').click(function() { 
     $.post('/account/edit', {post: 'email', email: $('#email').val() }); 
    }); 

Antwort

1

bereits. Dadurch wird nur das Feld und nicht die gesamte Zeile aktualisiert.

saveField(<fieldname>, <data>, <validation>); // structure of saveField() method 

$object->AccountDetail->User->saveField('email', $request, false); 

if($object->AccountDetail->User->saveField('email', $request, false)) { 
    return $this->Session->setFlash(__('Your email has been updated!')); 
} else { 
    return $this->Session->setFlash(__($object->AccountDetail->User->validationErrors)); 
} 

Sie können Ihre updateEmail() Funktion updateField() aktualisieren wie folgt vor:

private function updateField($object, $field = null, $id=null, $request=null) { 
      // Do I need to re-log them back in after I change their email to create a new session? 
    $object->AccountDetail->User->id = $id; 
    if($object->AccountDetail->User->saveField($field, $request, false)) { 
     return $this->Session->setFlash(__("Your $field has been updated!")); 
    } else { 
     return $this->Session->setFlash(__($object->AccountDetail->User->validationErrors)); 
    } 
} 

Und verwenden Sie es mögen:

$result = $this->updateField($this, 'email', $id, $this->params->data); 
Verwandte Themen