JSON数据基于请求客户端进行更改

时间:2016-08-26 00:01:35

标签: jquery json ajax cakephp datatables

我有一个返回JSON对象的CakePHP控制器。如果我直接使用浏览器(Chrome,在这种情况下)请求内容,我会得到我期望的内容。

Fiddler向我展示了我期待看到的东西。 (图片来源于此,因为我没有足够的声誉点)

https://s14.postimg.org/ajkh5e3ox/filddle_right.png

但是,如果我对jQuery的ajax API提出了相同的请求,那么响应会被修改。

Fiddler向我展示了我不希望看到的东西。

https://s12.postimg.org/5g8ip5q25/fiddle_wrong.png

您可以看到某些内容已修改数据结构(添加内容字段)并将引号编码为其unicode等效项。我试图将它提供给jQuery.DataTables()对象,如果这很重要的话。

无论如何,我很难过。任何无能的线索?

编辑:

非预期行为的请求标头如下所示

Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Host:10.11.3.4
Referer:http://10.11.3.4/test.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
X-Requested-With:XMLHttpRequest

而那个表现得像我认为的应该是:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Host:10.11.3.4
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36

因此,它看起来像请求中的Accept:标头"正常工作。"如果我将其设置为' text'请求会相应更改,返回的数据看起来不错,但仍然会被转义。

此时不确定该怎么做。

1 个答案:

答案 0 :(得分:0)

你的jquery请求是什么样的?

一个常见的错误是没有在jquery请求上设置'json'标志或其他适当的标头标志。

查看每个请求的请求标头可能是一个好主意,看看有什么不同。一种方式是服务器将字符串化的json内容作为有效负载发送回浏览器,第二种方法是将转义的json内容字符串作为字符串化json对象的“内容”参数发回。

实际上,在这种情况下,您实际上可能需要删除 jquery请求上的json标志,以使其更像浏览器请求做出响应。

祝你好运!