无法正确读取Cake PHP控制器函数处理Ajax调用发送的json编码成功/失败状态
我的问题有点类似于cakephp,jquery,.ajax(),dataType:json ,但我的观察结果略有不同。
我正在开发一个Cake PHP项目。 考虑group_assoc
模块的opstools
子模块。 因此,在group_assoc()
有这个函数group_assoc()
,它由ajax调用调用以更新组关联。
我的ajaxpost是这样的 –
$.post( url, function(data) { if(data) { alert(data.success); //alerts -> undefined alert(data); //alerts -> {"success":true} or {"success":false} if(data.success) { //does not work } } }, "json");
在opstools_controller.php
里面,我有 –
function group_assoc() { ... ... //some code ... ... $success //contains true or false - depending on previous logic echo json_encode(array("success" => $success)); }
因此,在Ajax响应处理函数内部(在ajax发布部分中),我得到一个像{"success":false}
这样的字符串。
我该如何解决这个问题。 我记得使用类似的Ajax发布并使用json_encode进行响应,这在之前的Core PHP项目(没有Cake PHP)中运行得非常好。 这可能是什么问题? 有什么指针吗?
更新
我是否需要明确设置任何标头? 为什么需要这个? 在哪里检查是否设置我们正在返回文本。 我试过把header("HTTP/1.1 200 OK");
在回显部分之前,就像现有代码中所做的那样 – 类似的Ajax处理函数。
另外,我设置了$this->autoRender = false;
在我的模块中。
在我看来,你可能会错过$.post()
API的参数:
.post( url, [data,] [success(data, textStatus, jqXHR),] [dataType] )
具体来说,是data
参数。 API的示例似乎表明它足够聪明,可以找出它何时丢失(该参数未出现在API示例中),但可能值得明确添加它:
$.post( url, null, function(data) { if(data) { alert(data.success); //alerts -> undefined alert(data); //alerts -> {"success":true} or {"success":false} if(data.success) { //does not work } } }, "json");
确保您发送的是正确的标题类型
header('Content-type: application/json');
或者,您可以使用jQuery的getJSON()方法来处理JSON