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产生随机字符串函数
Dec 06 PHP
生成卡号php代码
Apr 09 PHP
php获取四位字母和数字的随机数的实现方法
Jan 09 PHP
php析构函数的简单使用说明
Aug 24 PHP
apache和PHP如何整合在一起
Oct 12 PHP
Yii操作数据库实现动态获取表名的方法
Mar 29 PHP
php构造方法中析构方法在继承中的表现
Apr 12 PHP
Composer设置忽略版本匹配的方法
Apr 27 PHP
PHP设计模式之适配器模式原理与用法分析
Apr 25 PHP
php+redis实现消息队列功能示例
Sep 19 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 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
discuz Passport 通行证 整合笔记
2008/06/30 PHP
PHP下载生成的csv文件及问题总结
2015/08/06 PHP
PHP goto语句用法实例
2019/08/06 PHP
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
JavaScript使用ActiveXObject访问Access和SQL Server数据库
2015/04/02 Javascript
jQuery制作简洁的图片轮播效果
2015/04/03 Javascript
javascript清空table表格的方法
2015/05/14 Javascript
Angular实现购物车计算示例代码
2017/02/21 Javascript
解决easyui日期时间框ie的兼容的问题
2018/03/01 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
2018/09/26 Javascript
vue拖拽排序插件vuedraggable使用方法详解
2020/08/21 Javascript
JavaScript实现世界各地时间显示
2020/09/07 Javascript
python3使用urllib示例取googletranslate(谷歌翻译)
2014/01/23 Python
跟老齐学Python之从格式化表达式到方法
2014/09/28 Python
使用python检测主机存活端口及检查存活主机
2015/10/12 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
2016/11/16 Python
零基础使用Python读写处理Excel表格的方法
2019/05/02 Python
Python基于模块Paramiko实现SSHv2协议
2020/04/28 Python
基于ccs3的timeline时间线实现方法
2020/04/30 HTML / CSS
苹果台湾官网:Apple台湾
2019/01/05 全球购物
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
迪卡侬印尼体育用品商店:Decathlon印尼
2020/03/11 全球购物
Shopping happy life西班牙:以最优惠的价格提供最好的时尚配饰
2020/03/13 全球购物
如何进行Linux分区优化
2016/09/13 面试题
大学生自我鉴定
2013/12/16 职场文书
中文专业毕业生自荐书范文
2014/01/04 职场文书
优良学风班总结材料
2014/02/08 职场文书
转让协议书范本
2014/04/15 职场文书
初中英语课后反思
2014/04/25 职场文书
2015年服务员个人工作总结
2015/05/27 职场文书
健康证明
2015/06/19 职场文书
驻村工作简报
2015/07/20 职场文书
个人道歉信大全
2019/04/11 职场文书
高中优秀作文(范文)
2019/08/15 职场文书
CSS3 制作精美的定价表
2021/04/06 HTML / CSS
MySQL官方导出工具mysqlpump的使用
2021/05/21 MySQL