js 发送ajax与PHP响应的问题

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

js

clipboard.png

php

clipboard.png

阅读 3.2k
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 等诸多函数输出结果的用法。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题