2018-12-09

2018-12-10  本文已影响0人  前端小学生_f675

最近在使用ajax的时候按照后台要求使用post请求,跨域出现了一个问题:
当使用原生方法加上请求头:
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
传输json字符串时后台返回一个空数组,
当把请求头更改为
xhr.setRequestHeader("Content-Type","application/json");
后台XHR2又出现请求头格式不对的报错;
最终解决方案:
在xhr.send('action='+jsondata);
请求头更改为
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
问题解决。
怀疑是后台出了问题,然后就查阅一下文档:
原来是后台使用_POST这种是针对 "user_name="+ userName +"&user_age="+ userAge +"&user_sex="+ userSex 即普通表单写法。直接获取键值对; 其实正确的姿势应该是: 前端: contentType:'application/json; 后端: header('Content-type: application/json');data = json_decode(file_get_contents("php://input"), true);
还有一种解决方案:
前端:
contentType:'application/json;
后端:
必须使用$GLOBALS['HTTP_RAW_POST_DATA']取出来,然后再json_decode就行了
1、后端必须允许前端定义Content-Type之类的头请求。

header('Access-Control-Allow-Headers:x-requested-with,content-type');
2、php中exit的输出只允许字符串。所以要输出什么之前最好使用(string)转义一下。

3、如果使用ajax的application/json方式,记得data参数是字符串类型的。使用JSON.stringify()转换一下。
仔细想一想,我们之前公司同事刚使用post方法请求也是犯过类似的错误哦。
所以,经验害死人哦。。。

附上参考链接:
https://www.cnblogs.com/CyLee/p/7644380.html

上一篇下一篇

猜你喜欢

热点阅读