前端ajax请求接口时,有时请求回来一个json对象,有时请求回来一个json字符串是怎么回事?
原因:
这与响应头有关。后端response不设置返回类型,则默认会以普通文本处理,js中需要手动使用JSON.parse(str)等方法将返回的字符串转换为json对象使用。
解决办法:
(1) 设置响应头:
<?php
header("Content-type:application/json");//以JSON格式输出
// Content-type:application/json;charset=utf-8
$data = ["status" => "ok", "text" => "成功"];
echo json_encode($data);
//echo json($data) 如果是thinkPHP框架还可以借助助手函数
(2) 框架配置:
例如jquery设置dataType
$.ajax({
type: "post",
dataType: "json",//默认解析成json对象
url: `${url}`,
data: {},
success: function (data) {
console.log("ajax返回的类型是:", typeof data);
console.log(data);
}
});
注意
这里和请求头的content-type没有关系。请求头的content-type只会影响后端以怎样的方式解析请求体。