2011-08-15 32 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

是的。问题是知道如何获得服务的参数。 –