PHP – Ajax trong ứng dụng Zend Framework MVC: Server và AjaxContext

Logo Zend FrameworkAjaxContext được kế thừa từ ContextSwitch, đối tượng này có tác dụng:

Disable layouts, if enabled.
Set an alternate view suffix, effectively requiring a separate view script for the context.
Send appropriate response headers for the context desired.
Optionally, call specified callbacks to setup the context and/or perform post-processing.

Với AjaxContext, bạn có thể quy định kiểu dữ liệu mà trang sẽ trả về thông qua hàm addActionContext(). Khi hàm này được gọi, nó sẽ thiết lập thuộc tính’Content-Type’ trong response header thành giá trị tương ứng.

public function init()
{
	 $ajaxContext = $this->_helper->getHelper('AjaxContext');
	 $ajaxContext->addActionContext('getdata', 'json')
            		->initContext();
}

Ví dụ trên sẽ thiết lập Content-Type của trang getdata thành application/json.

Đồng thời sẽ thay thế tập tin view của trang getdata thành getdata.ajax.phtml nếu như client gửi một ajax request đến.

Khi truy xuất đến trang, bạn có thể xác định kiểu dữ liệu trả về thông qua 1 trong 2 địa chỉ

  • /getdata/format/json
  • /getdata?format=json

Ví dụ

Tạo một controller bất kì và thêm một getdataAction vào, sửa nội dung của controller này thành:

<?php
class TranslationController extends Zend_Controller_Action
{

    public function init()
    {
    	 $ajaxContext = $this->_helper->getHelper('AjaxContext');
   		 $ajaxContext	->addActionContext('getdata', 'html')
					->addActionContext('getdata', 'json')
	                		->initContext();
    }

    public function indexAction()
    {

    }

    public function getdataAction()
    {
    	$this->view->data=$arr = json_encode(array("id" => 123, "name" => "Yin Yang"));
    }
}

Tạo hai tập tin getdata.phtml và getdata.ajax.phtml trong thư mục /views/scripts/translation/

getdata.phtml:

<h1>HTML Response for Normal Request</h1>

getdata.ajax.phtml:

<h1>HTML Response for Ajax Request</h1>

Tạo một trang html bất kì để gửi ajax request đến trang getdata:

$.ajax({url:"translation/getdata?format=json",
		type:"GET",
		success:function(obj)
		{
			console.log(obj);
	}});

Kết quả:

AjaxContext JSON Response

Bây giờ nếu muốn lấy về nội dung của trang view dưới dạng html bằng ajax, bạn chỉ cần giá trị của url thành ‘translation/getdata?format=html’:

AjaxContext HTML Response

Khi sử dụng trình duyệt để truy xuất tới địa chỉ này, bạn sẽ chỉ nhận được nội dung của tập tin getdata.phtml:

AjaxContext - NormalHTML Response

YinYang’s Programming Blog

Advertisements

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s