Zend framework zend get与jQuery$.getJson

Zend framework zend get与jQuery$.getJson,zend-framework,Zend Framework,有人知道怎么做吗 我想将$.getJson()指向一个控制器,让它根据请求参数通过ajax返回json。不幸的是,Zend处理get参数的方式与jQuery编码的方式不同 如何使用Zend和jQuery实现这一点?我在stackoverflow上看到了一些关于Post参数的内容,但当涉及到获取时,我就不知所措了 当使用jQuery时,我使用以下代码得到一个404错误: 客户端: $.getJSON("/entry/get-member-course", { "id": 1, "

有人知道怎么做吗

我想将$.getJson()指向一个控制器,让它根据请求参数通过ajax返回json。不幸的是,Zend处理get参数的方式与jQuery编码的方式不同

如何使用Zend和jQuery实现这一点?我在stackoverflow上看到了一些关于Post参数的内容,但当涉及到获取时,我就不知所措了

当使用jQuery时,我使用以下代码得到一个404错误:


客户端:

$.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");        
}

getJSON
编码
JSON
字符串序列,例如
{Person:{name:{Ken],age:'24}}
,您的服务器端是否有相应的解码器


getJSON
编码
JSON
字符串序列,如
{Person:{name:{Ken],age:'24}}
,您的服务器端是否有相应的解码器


最简单的方法是使用上下文切换。在控制器中,使用“json”上下文为操作设置助手

调用脚本的视图应该包含对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);

最简单的方法是使用上下文切换。在控制器中,使用“json”上下文为操作设置助手

调用脚本的视图应该包含对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);

对问题是知道如何获取服务的参数。是的。问题是知道如何获取服务的参数。Zend如何理解jQuery创建的参数字符串?@Walt你是什么意思?您可以访问我的答案中所示的请求参数。可能会显示您的JavaScript代码,这样我就知道您在问什么了例如:jQuery将使用一个查询字符串发出请求,如?myParam=1&myParam2=2,而Zend需要/myParam/1/myParam2/2。您提到的是绕过了这一点,还是只需将所有参数移动到请求的url中?@Walt Zend处理这两种形式,因此
my/my action/param1/1/param2/2
my/my action?param1=1¶m2=2
相同。唯一需要注意的是前者(路由参数)优先,因此对于
my/my action/param/1?param=2
param
的值通过
Zend\u Controller\u action::\u getParam()
(它代表
Zend\u Controller\u请求Http::getParam()
)将是
1
Hmm看起来每次我都会得到404:(Zend怎么知道如何解释jQuery创建的参数字符串?@Walt你是什么意思?你可以访问我的答案中所示的请求参数。也许可以显示你的JavaScript代码,这样我就知道你在问什么了。例如:jQuery将使用一个查询字符串发出请求,如?myParam=1&myParam2=2,而Zend是预期为/myParam/1/myParam2/2。您提到的是绕过这一点,还是只需将所有参数移到请求的url中?@Walt Zend处理这两种形式,因此
my/my action/param1/1/param2/2
my/my action?param1=1¶m2=2
相同。唯一需要注意的是前者(路由参数)优先,因此对于
my/my action/param/1?param=2
,通过
Zend_Controller_action::\u getParam()
(其代理
Zend_Controller_Request_Http::getParam()
)的
param
的值将是
1
Hmm,看起来每次我都会得到一个404:(请参阅我的更新答案。此外,请显示客户端脚本。请参阅我的更新答案。此外,请显示客户端脚本。)