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 相关文章推荐
PHP与SQL注入攻击[三]
Apr 17 PHP
php下过滤HTML代码的函数
Dec 10 PHP
在命令行下运行PHP脚本[带参数]的方法
Jan 22 PHP
php中通过数组进行高效随机抽取指定条记录的算法
Sep 09 PHP
php导入excel文件到mysql数据库的方法
Jan 14 PHP
PHP速成大法
Jan 30 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
Jun 17 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
Dec 31 PHP
CodeIgniter视图使用注意事项
Jan 20 PHP
Laravel日志用法详解
Oct 09 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
Nov 23 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
一个用于MySQL的PHP XML类
2006/10/09 PHP
php in_array 函数使用说明与in_array需要注意的地方说明
2010/04/13 PHP
ajax取消挂起请求的处理方法
2013/03/18 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
2014/02/13 PHP
Yii实现Command任务处理的方法详解
2016/07/14 PHP
js 省地市级联选择
2010/02/07 Javascript
Jquery常用技巧收集整理篇
2010/11/14 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
Google Maps API地图应用示例分享
2014/10/23 Javascript
JavaScript获取并更改input标签name属性的方法
2015/07/02 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
2015/11/24 Javascript
JS实现拖动滚动条评分的效果代码分享
2016/09/29 Javascript
用js将long型数据转换成date型或datetime型的实例
2017/07/03 Javascript
分析JS中this引发的bug
2017/12/12 Javascript
vue.js添加一些触摸事件以及安装fastclick的实例
2018/08/28 Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
2019/01/30 Javascript
p5.js码绘“跳动的小正方形”的实现代码
2019/10/22 Javascript
vue中实现回车键登录功能
2020/02/19 Javascript
JS数组的常用10种方法详解
2020/05/08 Javascript
python基于phantomjs实现导入图片
2016/05/13 Python
Python读取xlsx文件的实现方法
2019/07/04 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
2020/02/13 Python
Pycharm快捷键配置详细整理
2020/10/13 Python
体验完美剃须:The Art of Shaving
2018/08/06 全球购物
德国高尔夫商店:Golfshop.de
2019/06/22 全球购物
高三自我鉴定
2013/10/23 职场文书
一年级班主任寄语
2014/01/19 职场文书
函授本科个人自我鉴定
2014/03/25 职场文书
超市促销活动总结
2014/07/01 职场文书
教师师德师风自我剖析材料
2014/09/29 职场文书
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书
本科毕业答辩开场白
2015/05/27 职场文书
运动会通讯稿300字
2015/07/20 职场文书
退伍军人感言
2015/08/01 职场文书
教师师德承诺书2016
2016/03/25 职场文书
Requests什么的通通爬不了的Python超强反爬虫方案!
2021/05/20 Python