无法正确读取Cake PHP控制器函数处理Ajax调用发送的json编码成功/失败状态

时间:2011-06-24 06:32:25

标签: json cakephp jquery response

我的问题与cakephp, jquery, .ajax(), dataType: json有点相似,但我的观察结果略有不同。

我正在开发一个Cake PHP项目。考虑group_assoc模块的opstools子模块。因此,group_assoc()中有一个函数opstools_controller.php,它由ajax调用来更新组关联调用。

我的ajax帖子是这样的 -

$.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;

2 个答案:

答案 0 :(得分:2)

确保您发送的是正确的标题类型

header('Content-type: application/json');

或者,您可以使用jQuery的getJSON()方法来处理JSON

答案 1 :(得分:1)

在我看来,您可能错过了$.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");