处理json数组CAKEPHP
这是我的javascript snipet处理json数组CAKEPHP,json,cakephp,Json,Cakephp,这是我的javascript snipet <script type="text/javascript"> $(document).ready(function() { $('form#FormId button.btn').click(function(event){ $.ajax({ type: "POST", url: "/controller/edit",
<script type="text/javascript">
$(document).ready(function() {
$('form#FormId button.btn').click(function(event){
$.ajax({
type: "POST",
url: "/controller/edit",
data: $("#FormId").serialize(),
success: function(response) {
alert(response.message);
alert(response['message']);
}
});
});
});
javascript上的两个警报都返回“未定义”如何处理?根据我的经验,回显内容不起作用。您应该返回json_编码的数据 这将使您的
edit()
函数如下所示:
public function edit()
{
$this->autoRender = false;
$this->request->onlyAllow('ajax');
return json_encode(array('message' => 'Welcome', 'type' => 'success'));
}
确保它有效;只需提醒整个响应对象以查看返回的内容。我使用控制器中的以下代码来实现这一点
public function edit()
{
$this->RequestHandler->respondAs('json'); // Very important without this it will not work
$this->autoRender = false;
$data = array('message'=>'Welcome','type'=>'success');
return json_encode($data);
}
因此,没有人能正确理解这一点 你需要使用 请参见如何使用启用 Cake现在将自动设置正确的标题,序列化为JSON,而不会呈现布局 作为旁注,您的代码
警报(response.message)代码>不起作用,因为响应
是一个字符串。您的标题是text/html
而不是application/json
。尝试console.log(response)
,您将看到它只是一个字符串。尝试添加
dataType: 'json',
您的ajax方法
如果不起作用,请尝试以下操作:
加
到您的索引方法
ie brower不知道json格式的文本。
你在这次测试中使用了什么样的broswer?使用F12打开开发人员工具包来检查服务器响应是什么,这是一个objct吗?在$.ajax语句中不需要数据类型:“json”吗?通常,直接使用json_encode()和/或exit()不是最佳做法。由于是2.x,视图层(视图类)应该对此负责。有关详细信息,请参阅。警报响应仅获取[object]。最好使用console.log(响应);这是来自response的警报:{“message”:“Welcome”,“type”:“success”}如果您现在键入:console.log(response.message)或alert(response.message)
,您应该会看到“Welcome”不知道为什么,我无法使用此方法获得响应,我已经在AppController上启用了RequestHandler,并且路由器::parseExtensions('json','xml');在routes.php上使用此方法时,响应为空。
class PostsController extends AppController {
public $components = array('RequestHandler');
public function index() {
$this->request->onlyAllow('ajax');
$this->set(array(
'data' => array('message'=>'Welcome','type'=>'success'),
'_serialize' => 'data',
));
}
}
dataType: 'json',
$this->response->type('text/plain');