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.ini中文版(1)
Oct 09 PHP
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
Dec 06 PHP
PHP最常用的ini函数分析 针对PHP.ini配置文件
Apr 22 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
Aug 16 PHP
php中strstr、strrchr、substr、stristr四个函数的区别总结
Sep 22 PHP
PHP实现动态柱状图改进版
Mar 30 PHP
ThinkPHP表单数据智能写入create方法实例分析
Sep 27 PHP
PHP简单实现无限级分类的方法
May 13 PHP
PHP实现权限管理功能示例
Sep 22 PHP
Yii2框架实现登陆添加验证码功能示例
Jul 12 PHP
laravel实现查询最后执行的一条sql语句的方法
Oct 09 PHP
php模拟post提交请求调用接口示例解析
Aug 07 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面向对象编程快速入门
2006/12/14 PHP
用PHP实现的四则运算表达式计算实现代码
2011/08/02 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
JS事件Event元素(兼容IE,Firefox,Chorme)
2012/11/01 Javascript
JQuery验证工具类搜集整理
2013/01/16 Javascript
NodeJS学习笔记之MongoDB模块
2015/01/13 NodeJs
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
NodeJS整合银联网关支付(DEMO)
2016/11/09 NodeJs
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
2017/08/29 Javascript
vue 中动态绑定class 和 style的方法代码详解
2018/06/01 Javascript
Vue+Express实现登录注销功能的实例代码
2019/05/05 Javascript
基于Vue和Element-Ui搭建项目的方法
2019/09/06 Javascript
微信小程序实现滑动翻页效果(完整代码)
2019/12/06 Javascript
Javascript Web Worker使用过程解析
2020/03/16 Javascript
Python用UUID库生成唯一ID的方法示例
2016/12/15 Python
Python使用回溯法子集树模板解决迷宫问题示例
2017/09/01 Python
Python切片操作深入详解
2018/07/27 Python
学习python可以干什么
2019/02/26 Python
梅尔倒谱系数(MFCC)实现
2019/06/19 Python
Pandas操作CSV文件的读写实现方法
2019/11/13 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
Python Print实现在输出中插入变量的例子
2019/12/25 Python
python Tensor和Array对比分析
2020/01/08 Python
python中什么是面向对象
2020/06/11 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
HTML5拖放API实现拖放排序的实例代码
2017/05/11 HTML / CSS
什么是事务?事务有哪些性质?
2012/03/11 面试题
远程调用的原理
2014/07/05 面试题
韩国商务邀请函
2014/01/14 职场文书
继承公证书样本
2014/04/04 职场文书
改进作风怎么办发言材料
2014/08/17 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
2015年“公民道德宣传日”活动方案
2015/05/06 职场文书
Redis安装启动及常见数据类型
2021/04/14 Redis
Vue实现导入Excel功能步骤详解
2021/07/03 Vue.js
Spring this调用当前类方法无法拦截的示例代码
2022/03/20 Java/Android