2010-12-30 37 views
8

Tôi đang sử dụng khung công tác zend, tôi muốn nhận dữ liệu POST bằng cách sử dụng bài đăng jquery ajax để lưu mà không cần làm mới trang.Zend và 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); 
      } 

     }); 
    }); 
}); 

Trên bộ điều khiển của mình, tôi không biết cách truy xuất dữ liệu POST từ ajax.

public function saveAction() 
{ 

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

Xin cảm ơn trước.

Trả lời

13

Set $.ajax 's dataType tùy chọn 'json', và sửa đổi các callback thành công để đọc từ JSON nhận:

$('#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; 
}); 

Và từ điều khiển của bạn, gửi dữ liệu như thế này:

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

Là điểm đóng, hãy đảm bảo rằng hiển thị chế độ xem tự động đã bị vô hiệu hóa, do đó, đầu ra duy nhất quay lại máy khách là đối tượng JSON.

+0

Nó hoạt động! cảm ơn karim79! –

+0

@Zend_Newbie_Dev - Bất kỳ lúc nào :) – karim79

+0

Một số đơn giản hóa cho [karim79] (http://stackoverflow.com/users/70393/karim79) 's [answer] (http://stackoverflow.com/questions/4559808/zend- và-jquery-ajax-post/4559825 # 4559825): 1. '' .ajax' của 'url' cũng có thể là tương đối (được đề nghị trong cùng một tên miền), 2.' $ .ajax' của 'dữ liệu' có thể cũng được tạo ra bằng cách sử dụng '$ (" # formId "). serialize()' (tự động mã hóa URL) –

2

đơn giản nhất cách để nhận đây là:

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

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

Hy vọng điều này sẽ làm việc cho bạn.