Jquery ajax 调用 Cake PHP 3.0
Jquery ajax call in Cake PHP 3.0
你好,
我正在尝试从控制器 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的'response'里,我有'SUCCESS'还有整个视图A,我不明白为什么...
我只想要 'SUCCESS'...
提前致谢!
实现它的最简单方法是在函数末尾添加 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"}
根据cakephp方式中的以下代码检测其是否ajax:
if($this->request->is('Ajax')) //Ajax Detection
{
$this->autoRender = false; // Set Render False
$this->response->body('Success');
return $this->response;
}
在此处查看更多检测器 - http://book.cakephp.org/3.0/en/controllers/request-response.html#Cake\Network\Request::addDetector
您也可以使用 $this->Url->build 而不是包含 Router 在视图中创建链接。
echo $this->Url->build(['action'=>'index']);
你好, 我正在尝试从控制器 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的'response'里,我有'SUCCESS'还有整个视图A,我不明白为什么... 我只想要 'SUCCESS'...
提前致谢!
实现它的最简单方法是在函数末尾添加 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"}
根据cakephp方式中的以下代码检测其是否ajax:
if($this->request->is('Ajax')) //Ajax Detection
{
$this->autoRender = false; // Set Render False
$this->response->body('Success');
return $this->response;
}
在此处查看更多检测器 - http://book.cakephp.org/3.0/en/controllers/request-response.html#Cake\Network\Request::addDetector
您也可以使用 $this->Url->build 而不是包含 Router 在视图中创建链接。
echo $this->Url->build(['action'=>'index']);