2010-12-30 15 views
8

Ich benutze zend Framework, ich möchte POST-Daten mit Jquery Ajax Post auf einem zu speichern, ohne die Seite zu aktualisieren.Zend und Jquery (Ajax Post)

//submit.js 

$(function() { 

    $('#buttonSaveDetails').click(function(){ 
     var details = $('textarea#details').val(); 
     var id = $('#task_id').val(); 
     $.ajax({ 
      type: 'POST', 
      url: 'http://localhost/myproject/public/module/save', 
      async: false, 
      data: 'id=' + id + '&details=' + details, 
      success: function(responseText) { 
       //alert(responseText) 
       console.log(responseText); 
      } 

     }); 
    }); 
}); 

Auf meinem Controller weiß ich nur nicht, wie die POST-Daten von Ajax abgerufen werden.

public function saveAction() 
{ 

    $data = $this->_request->getPost(); 
    echo $id = $data['id']; 
    echo $details = $data['details']; 
    //this wont work; 
} 

Vielen Dank im Voraus.

Antwort

13

Set $.ajax ‚s dataType Option 'json', und den Erfolg Rückruf ändern aus dem empfangenen JSON zu lesen:

$('#buttonSaveDetails').click(function(){ 
    var details = $('textarea#details').val(); 
    var id = $('#task_id').val(); 
    $.ajax({ 
      type: 'POST', 
      dataType: 'json', 
      url: 'http://localhost/myproject/public/module/save', 
      async: false, 

      // you can use an object here 
      data: { id: id, details: details }, 
      success: function(json) { 
       console.log(json.id + ' ' + json.details); 
      } 
    }); 

    // you might need to do this, to prevent anchors from following 
    // or form controls from submitting 
    return false; 
}); 

Und von dem Controller senden, die Daten wie folgt aus:

$data = $this->_request->getPost(); 
echo Zend_Json::encode(array('id' => $data['id'], 'details' => $data['details'])); 

Stellen Sie als Abschlusspunkt sicher, dass das automatische Rendering von Ansichten deaktiviert wurde. Daher ist das JSON-Objekt die einzige Ausgabe, die zurück zum Client geleitet wird.

+0

Es funktioniert! Danke Karim79! –

+0

@Zend_Newbie_Dev - Jederzeit :) – karim79

+0

Einige Vereinfachungen zu [Karim79] (http://stackoverflow.com/users/70393/karim79) 's [Antwort] (http://stackoverflow.com/questions/4559808/zend- und-jquery-ajax-post/4559825 # 4559825): 1. '$ .ajax's' url' kann auch relativ sein (empfohlen in derselben Domain), 2. '$ .ajax's' data' kann auch erzeugt werden mit '$ (" # formId "). serialize()' (tut URL-Codierung automatisch) –

2

einfachste Weg, dies zu bekommen ist:

$details=$this->getRequest()->getPost('details'); 

$id= $this->getRequest()->getPost('id'); 

Hoffnung dies für Sie arbeiten.