php 作为后端时,前端 js 使用 ajax 技术进行相互信息传送时,经常会出错误,对于新手来说有些手足无措。总结错误、经验,以后随时回顾。
第一个问题,当前端无错误的情况下,页面调试也显示没有问题,但是 ajax 获取不到后端 php 文件发送过来的信息:
前端代码如下:
- $.ajax({
- url: '1.php',
- //目的php文件
- data: {
- "age": 12,
- "name": 'zh'
- },
- //传送的数据
- type:'post', //方式post/get
- dataType: 'json',
- //数据传送格式
- success:
- function(response) {
- console.log(response);
- },
- error: function(response) {
- console.log(response);
- console.log("错误");
- }
- });
php 后端代码如下:
- $postAge = $_POST['age'];
- $postName = $_POST['name'];
- echo $postAge;
- echo $postName;
页面出现后,F12 调试查看如下所示:
状态码都没问题,status 是 200,responseReady 是 4,说明在 html 发送给 php 文件信息过程是没有问题的。而且 php 也返回了信息。可是为什么程序走了 error 而没有走 success 呢?
这时需要小心!由于 php 后端多个 echo 没有把数据整理为 json 格式。也就是说 php 返回的是一个字符串不是 json 格式的数据。有人说加上 json_encode() 呢?这样也是不行的,因为 json_encode() 的函数作用没搞清,百度仔细看下。json_encode() 与 json_decode() 是一对。
json_encode(
json_decode(
回到本文提出的例子上。
既然传送回来的数据不再是 json 格式的数据,那么就是 dataType 的问题了。
dataType 是告诉浏览器检查传送的数据格式。如果不写,浏览器不会去检查数据格式,写了就一定检查而且必须满足格式要求。本例中,由于写了为 json 格式,但是传回来时不是 json 格式,所以浏览器认为传输过程中出现了错误,所以走了 error 而没有走 success。
这时最好的方式是修改 php 代码,将 echo 的内容改为一个数组,用数组的信形式把整体数据整理为 json 格式进行传送(json_encode),避免发生错误。
当然也可以使用另一种方法,类似作弊的方法,直接注释掉(或者不写)dataType,这样浏览器就不会去检查数据的形式而是根据数据的形式智能的判断,类似蒙混过关。
- 以下是dataType的W3school解释:
值得注意的是,后端 php 文件中多个 echo 输出后,数据返回确是一起返回的,既是修改正确后,前端得到的数据是 2 个数据合为一个字符串的形式数据。本例子中得到的数据是 12zh。
当然还有很多细节问题了,比如 php 后端只能用 echo 或者 die(),不能用 return,这是因为 return 是只在服务器端中返回数据使用,而 echo 是打印数据,将数据从服务器端打印出来,给前端。return 只能在服务器端,或者前端单一的返回。而 die()的强大就不提了,直接终止后端 php 程序的形式返回数据。
还有比如在 $,ajax({}); 中每一行既是一个参数,参数之间是逗号隔开,多个数据是在 {} 内,隔开是用逗号等等。
来源: http://www.bubuko.com/infodetail-1959985.html