PHP 中使用ajax时一些常见错误总结整理


Posted in PHP onFebruary 27, 2017

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调试查看如下所示:

PHP 中使用ajax时一些常见错误总结整理

状态码都没问题,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),把json整理为json格式的数据。在上例中,就算php后端代码改写为:echo json_encode(postAge);和echojsonencode(postName);也是不对的。因为这样仅仅是把单个postAge和postName整理为了json格式,但是由于是2个返回,既是2个response,在浏览器调试页面也可以看到1个post回来2个response。这样导致2个json格式的数据返回给前端是就不再是json格式的数据(我理解为json污染,方便理解)。也就是单个数据是json格式但是多个json格式数据“胡乱”结合在一起不按照json格式合并在一起就会产生“污染”。导致整体数据格式混乱无法被识别,这种情况者数据处理和传输时随时都见得到。

json_decode(json,true/false)函数是把json整理为数组或者object(理解为类)。true是强制装换为(关联)数组,false是默认的会转换为object形式的数据。

回到本文提出的例子上。

既然传送回来的数据不再是json格式的数据,那么就是dataType的问题了。

dataType是告诉浏览器检查传送的数据格式。如果不写,浏览器不会去检查数据格式,写了就一定检查而且必须满足格式要求。本例中,由于写了为json格式,但是传回来时不是json格式,所以浏览器认为传输过程中出现了错误,所以走了error而没有走success。

这时最好的方式是修改php代码,将echo的内容改为一个数组,用数组的信形式把整体数据整理为json格式进行传送(json_encode),避免发生错误。

当然也可以使用另一种方法,类似作弊的方法,直接注释掉(或者不写)dataType,这样浏览器就不会去检查数据的形式而是根据数据的形式智能的判断,类似蒙混过关。

 以下是dataType的W3school解释:

PHP 中使用ajax时一些常见错误总结整理

值得注意的是,后端php文件中多个echo输出后,数据返回确是一起返回的,既是修改正确后,前端得到的数据是2个数据合为一个字符串的形式数据。本例子中得到的数据是12zh。

当然还有很多细节问题了,比如php后端只能用echo或者die(),不能用return,这是因为return是只在服务器端中返回数据使用,而echo是打印数据,将数据从服务器端打印出来,给前端。return只能在服务器端,或者前端单一的返回。而die()的强大就不提了,直接终止后端php程序的形式返回数据。

还有比如在$,ajax({});中每一行既是一个参数,参数之间是逗号隔开,多个数据是在{}内,隔开是用逗号等等。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

PHP 相关文章推荐
计数器详细设计
Oct 09 PHP
PHP HTML代码串 截取实现代码
Jun 29 PHP
PHP文件读写操作之文件写入代码
Jan 13 PHP
PHP实现手机归属地查询API接口实现代码
Aug 27 PHP
做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
Apr 13 PHP
10个超级有用值得收藏的PHP代码片段
Jan 22 PHP
PHP获取一段文本显示点阵宽度和高度的方法
Mar 12 PHP
php判断数组中是否存在指定键(key)的方法
Mar 17 PHP
php中foreach结合curl实现多线程的方法分析
Sep 22 PHP
php基于curl实现随机ip地址抓取内容的方法
Oct 11 PHP
php传值方式和ajax的验证功能
Mar 27 PHP
PHP多进程编程之僵尸进程问题的理解
Oct 15 PHP
PHP/HTML混写的四种方式总结
Feb 27 #PHP
老生常谈文本文件和二进制文件的区别
Feb 27 #PHP
php实现数据库的增删改查
Feb 26 #PHP
php查询及多条件查询
Feb 26 #PHP
php批量删除操作代码分享
Feb 26 #PHP
浅谈PHP的反射API
Feb 26 #PHP
CentOS 上搭建 PHP7 开发测试环境
Feb 26 #PHP
You might like
PHP 编写的 25个游戏脚本
2009/05/11 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
(currentStyle)javascript为何有时用style得不到已设定的CSS的属性
2007/08/15 Javascript
深入理解Javascript作用域与变量提升
2013/12/09 Javascript
js 剪切板应用clipboardData详细解析
2013/12/17 Javascript
JavaScript中getUTCMinutes()方法的使用详解
2015/06/10 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
jquery对象和DOM对象的任意相互转换
2016/02/21 Javascript
Bootstrap开发实战之第一次接触Bootstrap
2016/06/02 Javascript
jQuery Validate插件实现表单验证
2016/08/19 Javascript
BootStrap注意事项小结(五)表单
2017/03/10 Javascript
关于JavaScript的单双引号嵌套问题
2017/08/20 Javascript
详解webpack编译多页面vue项目的配置问题
2017/12/11 Javascript
浅谈Webpack核心模块tapable解析
2018/09/11 Javascript
使用zrender.js绘制体温单效果
2019/10/31 Javascript
react使用CSS实现react动画功能示例
2020/05/18 Javascript
vue使用nprogress加载路由进度条的方法
2020/06/04 Javascript
[51:00]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
详解python函数传参是传值还是传引用
2018/01/16 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
2018/10/11 Python
使用Pandas将inf, nan转化成特定的值
2019/12/19 Python
Django数据库操作之save与update的使用
2020/04/01 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
2020/04/20 Python
基于python实现复制文件并重命名
2020/09/16 Python
PHP数据运算类型都有哪些
2013/11/05 面试题
大学生实习感言
2014/01/16 职场文书
岗位职责的构建方法
2014/02/01 职场文书
学生会干部自荐信
2014/02/04 职场文书
模具专业毕业推荐信
2014/03/08 职场文书
《与朱元思书》的教学反思
2014/04/17 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
公司给客户的感谢信
2015/01/23 职场文书
离婚答辩状怎么写
2015/05/22 职场文书
接触艺术对孩子学习思维有益
2019/08/06 职场文书
一篇文章弄懂MySQL查询语句的执行过程
2021/05/07 MySQL
golang语言指针操作
2022/04/14 Golang