我的问题与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;
。
答案 0 :(得分:2)
答案 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");