【发布时间】:2014-09-12 07:29:47
【问题描述】:
我有以下 jQuery 代码。该代码的目的是将data 设置中的json 数据发送到DocumentsController 控制器中的CakePHP addSourceDocuments() 函数(因此,'url' 设置中的'/documents/addsourcedocuments')。
jQuery.ajax({
type: 'POST',
url: '/documents/addsourcedocuments',
accepts: 'application/json',
data: {
sourceFileName: file.name,
sourceFileId: file.id
},
dataType: 'json',
success: function (data) {
alert(data);
},
error: function (jqXHR, textStatus, errorThrown) {
alert("error!");
}
});
CakePHP 文档控制器具有以下代码。我使用 CakePHP Cookbook 2.x “JSON 和 XML 视图”页面 (http://book.cakephp.org/2.0/en/views/json-and-xml-views.html) 中的说明,试图从没有视图的 CakePHP 控制器返回 json 数据。
class DocumentsController extends AppController {
public $components = array('RequestHandler');
public function index() {
$this->layout = 'index';
}
public function addSourceDocuments() {
$this->autoRender = false;
if ($this->RequestHandler->isAjax()) {
Configure::write('debug', 0);
}
if (!empty($this->data)) {
$this->log($this->data, 'debug');
$this->set('response', 'here is the newest content');
$this->set('_serialize', array('response'));
}
}
}
我的 routes.php 文件中也有以下内容(按照上面提到的“JSON 和 XML 视图”页面的说明)。
Router::parseExtensions('json');
虽然 CakePHP 控制器成功接收到来自 jQuery ajax 调用的数据($this->log($this->data, 'debug'); 正在将接收到的数据写入日志,这是我期望接收的数据),但 CakePHP 控制器没有返回任何数据(@ jQuery.ajax 调用的 error 设置中的 987654331@ 值是一个空字符串)。唯一提供的其他信息是errorThrown.message 设置的值为“输入意外结束”,textStatus 设置的值为“parsererror”。
我希望jQuery.ajax 调用的success 设置应在data 变量中包含“这是最新内容”,因为addSourceDocuments() 函数正在使用_serialize 关键字设置该值。显然,这不会发生。
那么,我做错了什么?
谢谢!
【问题讨论】: