嗨,
我正试图从控制器B向视图A发出ajax请求,如下所示:
在视图中A:
var tab = new Array();
function updateResult(){
$.ajax({
type:"POST",
url:"<?PHP echo Router::url(array('controller'=>'B','action'=>'viewresult'));?>",
dataType: 'text',
async:false,
success: function(tab){
alert('success');
},
error: function (tab) {
alert('error');
}
});
}
在控制器B中:
public function viewresult()
{
echo 'SUCCESS';
}
问题是在ajax的’响应’中,我’成功’但也是整个视图A,我不明白为什么……
我只想’成功’……
提前致谢 !
解决方法:
实现它的最简单方法是在函数末尾添加die(),以防止加载整个布局:
public function viewresult()
{
echo 'SUCCESS';
die;
}
要么
public function viewresult()
{
die('SUCCESS');
}
但更传统的方式是使用JSONView.您的操作应如下所示:
public function viewresult()
{
$this->set('text', 'SUCCESS');
$this->set('_serialize', ['text']);
}
您还必须在控制器的initialize()方法中加载RequestHandler组件:
public function initialize()
{
parent::initialize();
$this->loadComponent('RequestHandler');
}
您需要为稍后在routes.PHP中连接的所有路由设置允许的扩展:
Router::extensions('json', 'xml');
现在,您可以访问在其URL的末尾添加扩展名.json的操作,因此您需要修改ajax调用URL:
url:"<?PHP echo Router::url(array('controller'=>'Main','action'=>'viewresult', '_ext' => 'json'));?>"
这就是全部,但请记住,此解决方案会强制您在响应中处理JSON数组.在此示例中,输出将如下所示:
{"text": "SUCCESS"}