无法正确读取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