2011-08-15 75 views
1

有誰知道如何做到這一點?

我想要$ .getJson()指向一個控制器,並讓它通過基於請求參數的ajax返回json。不幸的是,看起來Zend處理的get參數與jQuery編碼的參數不同。

我該如何使用Zend和jQuery來做到這一點?我看到關於Post參數的一些關於stackoverflow的內容,但是當談到GET的時候我卻迷失了方向。


客戶端::

$.getJSON("/entry/get-member-course", 
{ 
    "id": 1, 
    "format": "json" 
}, 
function(json) { 
    alert("WIN"); 
}); 

服務器端:

public function init() { 
    $this->_helper->ajaxContext->addActionContext('get-member-course', 'json')->initContext(); 
} 

public function getMemberCourseAction() { 
    $this->view->test = Array("test"=>"bleh");   
} 
+0

看到我更新的答案。另外,顯示您的客戶端腳本 – Phil

回答

1

最簡單的方式是使用上下文切換。在你的控制器,安裝在AjaxContext助手爲您的操作與「JSON」上下文

class EntryController extends Zend_Controller_Action 
{ 
    public function init() 
    { 
     $this->_helper->ajaxContext->addActionContext('get-member-course', 'json') 
            ->initContext(); 
    } 

    public function getMemberCourseAction() 
    { 
     $id = $this->_getParam('id'); 

     $this->view->test = array('test' => 'bleh'); 
    } 
} 

用於調用腳本視圖應包含對JSON URL的參考。例如,假設您的JSON代碼通過單擊鏈接而解僱了,像這樣創建

<a id="get-json" href="<?php echo $this->url(array(
    'action'  => 'get-member-course', 
    'controller' => 'entry', 
    'id'   => $someId 
), null, true) ?>">Click me for JSON goodness</a> 

你的客戶端代碼的鏈接將有這樣的事情

$('#get-json').click(function() { 
    var url = this.href; 
    $.getJSON(url, { 
     "format": "json" // this is required to trigger the JSON context 
    }, function(data, textStatus, jqXHR) { 
     // handle response here 
    }); 
}); 

默認情況下,JSON上下文被觸發,任何視圖屬性被序列化爲JSON並在響應中返回。如果您的視圖屬性不能簡單地轉換,你需要禁用自動JSON序列...

$this->_helper->ajaxContext->addActionContext('my-action', 'json') 
          ->setAutoJsonSerialization(false) 
          ->initContext(); 

,並提供一個JSON視圖腳本

// controllers/my/my-action.json.phtml 
$simplifiedArray = array(
    'prop' => $this->someViewProperty->getSomeValue() 
); 
echo Zend_Json::encode($simplifiedArray); 
+0

Zend如何知道如何解釋jQuery創建的參數字符串呢? –

+0

@Walt你是什麼意思?您可以訪問我的答案中顯示的請求參數。也許顯示你的JavaScript代碼,這樣我就知道你在問什麼 – Phil

+0

例如:jQuery將發出一個查詢字符串,如?myParam = 1&myParam2 = 2,而Zend期待/ myParam/1/myParam2/2。你提到的是否規避了或者你必須將所有參數移動到請求的url中? –

0

getJSON編碼JSON串序列,例如

當使用jQuery我使用此代碼得到404錯誤作爲{Person:{name: "Ken", age: "24"}},你有沒有相應的解碼器在你的服務器端?

JSON PHP

Zend PHP JSON

+0

是的。問題是知道如何獲得服務的參數。 –