我想向控制器发送Ajax请求,我在客户端做这样的
jQuery.ajax({
url: "public/visits/visit/get-visits",
type: "POST",
dataType: 'json',
data: data,
success: function(data){
alert(data)
},
error:function(){
alert("fail :(");
}
});
在服务器端,我处理请求作为其他请求
public function getVisitsAction() {
if (isset($_POST)) {
$mapper = new Visits_Model_VisitsMapper();
$allVisits = $mapper->getAllVisits();
echo json_encode($allVisits);
}
当我调用操作时,会发生失败警报,当我通过防火错误检查出来时,我发现它将json数据返回给客户端,以获取页面get-visit.phtml。
如何从发送json请求的页面处理成功函数中的响应并将其重定向到get-visit.phtml页面?
答案 0 :(得分:19)
Zend有Zend_Controller_Action_Helper_Json执行以下操作:
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
echo json_encode($allVisits);
exit;
所以它可能更简单:
public function getVisitsActions() {
if ($this->getRequest()->isXmlHttpRequest()) {
if ($this->getRequest()->isPost()) {
$mapper = new Visits_Model_VisitsMapper();
$this->_helper->json($mapper->getAllVisits());
}
}
else {
echo 'Not Ajax';
// ... Do normal controller logic here (To catch non ajax calls to the script)
}
}
答案 1 :(得分:5)
有关更正确的方法。我会在您的控制器中使用以下内容
public function getVisitsActions() {
if ($this->getRequest()->isXmlHttpRequest()) {
if ($this->getRequest()-isPost()) {
$mapper = new Visits_Model_VisitsMapper();
$allVisits = $mapper->getAllVisits();
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
echo json_encode($allVisits);
exit;
}
}
else {
// ... Do normal controller logic here (To catch non ajax calls to the script)
}
}
答案 2 :(得分:2)
//客户端
jQuery.ajax({
url: "public/visits/visit/get-visits",
type: "POST",
dataType: 'json',
data: data,
success: function(data){
for(i=0;i<data.length;i++){
alert(data[i]);
}
},
error:function(){
alert("fail :(");
}
});
//服务器端
public function getVisitsAction() {
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
if (isset($_POST)) {
$mapper = new Visits_Model_VisitsMapper();
$allVisits = $mapper->getAllVisits();
echo json_encode($allVisits);
exit;
}
答案 3 :(得分:1)
在Zend中使用Zend json时,您不需要进一步解析ajax部分中的数据。 Zend独自完成它。
进一步回复标题:Content-Type:application/json
服务器端:
$this->_helper->json($data);
客户端:
jQuery.ajax({
url: "public/path to",
type: "POST",
dataType: 'json',
data: data,
success: function(data){
var username = data.user_name;
...
},
答案 4 :(得分:0)
如果使用POST
HTTP方法调用,您可能需要禁用操作的视图呈现。我是这样做的:
Zend_Controller_Front::getInstance()->setParam('noViewRenderer', true);
但是还有其他方法可以做到这一点。您可以在官方ViewRenderer documentation中查看更多信息。
希望有所帮助。
答案 5 :(得分:0)
您可以使用JsonModel - 只需返回:
返回新的JsonModel();
别忘了添加
使用Zend \ View \ Model \ JsonModel;
答案 6 :(得分:-1)
jQuery.ajax({
url: "public/path to",
type: "POST",
dataType: 'json',
data: data,
success: function(data){
for(i=0;i<data.length;i++){
alert(data[i]);
}
},
error:function(){
alert("fail :("");
}
});