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 相关文章推荐
phpmyadmin3 安装配置图解教程
Mar 29 PHP
关于访问控制的一首PHP面试题(对属性或方法的访问控制)
Sep 13 PHP
apache和php之间协同工作的配置经验分享
Apr 08 PHP
php中\r \r\n \t的区别示例介绍
Feb 08 PHP
理解PHP中的stdClass类
Apr 18 PHP
PHP批量生成图片缩略图的方法
Jun 18 PHP
php实现curl模拟ftp上传的方法
Jul 29 PHP
基于命令行执行带参数的php脚本并取得参数的方法
Jan 25 PHP
php基于jquery的ajax技术传递json数据简单实例
Apr 15 PHP
php编程实现简单的网页版计算器功能示例
Apr 26 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
May 25 PHP
PHP如何使用array_unshift()在数组开头插入元素
Sep 01 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调用nginx的mod_zip模块打包ZIP文件
2014/06/11 PHP
PHP查看当前变量类型的方法
2015/07/31 PHP
使用Huagepage和PGO来提升PHP7的执行性能
2015/11/30 PHP
php 运算符与表达式详细介绍
2016/11/30 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
js 匿名调用实现代码
2009/06/19 Javascript
javascript 动态修改样式和层叠样式表代码
2010/04/27 Javascript
强大的jquery插件jqeuryUI做网页对话框效果!简单
2011/04/14 Javascript
JavaScript 大数据相加的问题
2011/08/03 Javascript
JS定时器实例
2013/04/17 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
javascript中style.left和offsetLeft的用法说明
2014/03/07 Javascript
javascript实现九宫格相加数值相等
2020/05/28 Javascript
jquery解析XML及获取XML节点名称的实现代码
2016/05/18 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
2017/03/05 Javascript
微信小程序 生命周期函数详解
2017/05/24 Javascript
详解Angular调试技巧之报错404(not found)
2018/01/31 Javascript
如何使用CSS3+JQuery实现悬浮墙式菜单
2019/06/18 jQuery
[50:15]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python为tornado添加recaptcha验证码功能
2014/02/26 Python
Python基础教程之正则表达式基本语法以及re模块
2016/03/25 Python
Python编程中对super函数的正确理解和用法解析
2016/07/02 Python
python搭建服务器实现两个Android客户端间收发消息
2018/04/12 Python
python 字符串只保留汉字的方法
2018/11/16 Python
python实现基于朴素贝叶斯的垃圾分类算法
2019/07/09 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
2019/09/25 Python
巴西电子产品购物网站:Saldão da Informática
2018/01/09 全球购物
AJAX应用和传统Web应用有什么不同
2013/08/24 面试题
编辑求职信样本
2013/12/16 职场文书
大学四年个人的自我评价
2014/02/26 职场文书
槐乡的孩子教学反思
2014/04/27 职场文书
经济信息系毕业生自荐信
2014/06/02 职场文书
2015毕业寄语大全
2015/02/26 职场文书
同事打架检讨书
2015/05/06 职场文书
城南旧事读书笔记
2015/06/29 职场文书