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 相关文章推荐
dedecms系统常用术语汇总
Apr 03 PHP
理解php原理的opcodes(操作码)
Oct 26 PHP
PHP之数组学习
May 29 PHP
php设计模式  Command(命令模式)
Jun 17 PHP
PHP代码实现爬虫记录――超管用
Jul 31 PHP
基于laravel制作APP接口(API)
Mar 15 PHP
PHP身份证校验码计算方法
Aug 10 PHP
jquery不支持toggle()高(新)版本的问题解决
Sep 24 PHP
php中遍历二维数组并以表格的形式输出的方法
Jan 03 PHP
PHP laravel中的多对多关系实例详解
Jun 07 PHP
php 调用百度sms来发送短信的实现示例
Nov 02 PHP
php传值和传引用的区别点总结
Nov 19 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
用Flash图形化数据(二)
2006/10/09 PHP
php面向对象的方法重载两种版本比较
2008/09/08 PHP
CodeIgniter中使用cookie的三种方式详解
2014/07/18 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
JS弹出层单纯的绝对定位居中示例代码
2014/02/18 Javascript
JavaScript调用ajax获取文本文件内容实现代码
2014/03/28 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
WebApi+Bootstrap+KnockoutJs打造单页面程序
2016/05/16 Javascript
浅谈JavaScript对象的创建方式
2016/06/13 Javascript
一次围绕setTimeout的前端面试经验分享
2017/06/15 Javascript
JavaScript使用Ajax上传文件的示例代码
2017/08/10 Javascript
JS监控关闭浏览器操作的实例详解
2017/09/12 Javascript
在vue里使用codemirror遇到的问题
2018/11/01 Javascript
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
2020/04/28 Javascript
JS实现多功能计算器
2020/10/28 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
2020/10/31 Javascript
python海龟绘图实例教程
2014/07/24 Python
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
Python 列表排序方法reverse、sort、sorted详解
2016/01/22 Python
python批量修改ssh密码的实现
2019/08/08 Python
浅谈Pytorch torch.optim优化器个性化的使用
2020/02/20 Python
Django如何在不停机的情况下创建索引
2020/08/02 Python
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
一套比较完整的软件测试人员面试题
2012/05/13 面试题
办公室驾驶员岗位职责
2013/11/15 职场文书
幼儿教师工作感言
2014/02/14 职场文书
优秀管理者获奖感言
2014/02/17 职场文书
私人会所最新创业计划书范文
2014/03/24 职场文书
家长通知书家长评语
2014/04/17 职场文书
运动会拉拉队口号
2014/06/09 职场文书
经济贸易专业自荐信
2014/06/11 职场文书
2015年个人自我剖析材料
2014/12/29 职场文书
平凡的世界读书笔记
2015/06/25 职场文书
2019年世界儿童日宣传标语
2019/11/22 职场文书
PHP中国际化的字符串排序和比较对象详解
2021/08/23 PHP