js 发送ajax与PHP响应的问题

何寶榮
  • 2
新手上路,请多包涵

PHP中,用header("Content-type: application/json");设置响应类型后,$.get()和$.getJSON都不能获得响应数据,也无法调用回调函数;但是去掉在php那边的header("Content-type: application/json")后就能正常获得数据了,怎么解决设置了响应类型的同时,jQuery能正常获得响应数据?

js

clipboard.png

php

clipboard.png

回复
阅读 1.9k
4 个回答
✓ 已被采纳

首先要了解 http header 中 Content-Type 是指要发送的数据 内容类型,客户端和服务端会根据此字段判断内容类型,进而去用不同的方法解析来获取内容数据。

jQuery 中 Content-Type 默认值contentType (default: 'application/x-www-form-urlencoded; charset=UTF-8')

但是,你服务端(PHP)设置的为 Content-type: application/json

所以需要指明,jQuery 中的 contentType 值为 Content-type: application/json

直接echo json_decode之后的字符串,如果是使用框架的话直接return就行了

var_dump($res);改为exit($res);

clipboard.png

你这上面设置了 Content-Type: application/json ,但是你返回的数据库呢?有一个是符合 application/json 的吗?

第一个,exit 直接退出, 当 xhr 收到 Content-Type: application/json 并不能解析。
第二个,var_dump 会输出其他额外的内容,主要是用来进行调试。
第三个,下面你又在连接失败时打印了一个字符串。

你这上面三个都不符合 Content-Type: application/json ,JS 怎么解析?轻则进入 error 回调,重则解析异常。

你得先了解,什么是 JSON, 以及 PHP 中 print,print_r,var_dump,exit,die,echo,sprintf 等诸多函数输出结果的用法。

宣传栏