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 相关文章推荐
初学者入门:细述PHP4的核心Zend
Sep 05 PHP
php MYSQL 数据备份类
Jun 19 PHP
PHP中英混合字符串截取函数代码
Jul 17 PHP
PHP字符串的编码问题的详细介绍
Apr 27 PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
Aug 31 PHP
PHP无限分类(树形类)
Sep 28 PHP
php获取301跳转URL简单实例
Dec 16 PHP
php命名空间学习详解
Feb 27 PHP
ThinkPHP里用U方法调用js文件实例
Jun 18 PHP
PHP实现获取文件后缀名的几种常用方法
Aug 08 PHP
详谈php静态方法及普通方法的区别
Oct 04 PHP
PHP中快速生成随机密码的几种方式
Apr 17 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/10/09 PHP
Laravel路由设定和子路由设定实例分析
2016/03/30 PHP
PHP数据库操作四:mongodb用法分析
2017/08/16 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
2019/10/30 PHP
jQuery 核心函数以及jQuery对象
2010/03/23 Javascript
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
2014/06/10 Javascript
使用JavaScript获取地址栏参数的方法
2014/12/19 Javascript
javascript将异步校验表单改写为同步表单
2015/01/27 Javascript
javascript实现可拖动变色并关闭层窗口实例
2015/05/15 Javascript
简介JavaScript中search()方法的使用
2015/06/06 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
微信小程序 二维码canvas绘制实例详解
2017/01/06 Javascript
Easyui ueditor 整合解决不能编辑的问题(推荐)
2017/06/25 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
2018/01/08 Javascript
vue组件开发之用户无限添加自定义填写表单的方法
2018/08/28 Javascript
json前后端数据交互相关代码
2018/09/19 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
微信小程序实现下拉刷新动画
2019/06/21 Javascript
layui实现数据表格点击搜索功能
2020/03/26 Javascript
微信小程序使用 vant Dialog组件的正确方式
2020/02/21 Javascript
微信小程序实现watch监听
2020/06/04 Javascript
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
Windows和Linux下使用Python访问SqlServer的方法介绍
2015/03/10 Python
windows 10下安装搭建django1.10.3和Apache2.4的方法
2017/04/05 Python
如何将json数据转换为python数据
2020/09/04 Python
Python批量获取并保存手机号归属地和运营商的示例
2020/10/09 Python
python 爬虫之selenium可视化爬虫的实现
2020/12/04 Python
CSS3教程:边框属性border的极致应用
2009/04/02 HTML / CSS
html5指南-2.如何操作document metadata
2013/01/07 HTML / CSS
幼儿园教师备课制度
2014/01/12 职场文书
会计与出纳自荐书范文
2014/03/16 职场文书
租房协议书样本
2014/08/20 职场文书
如何使用JavaScript策略模式校验表单
2021/04/29 Javascript
openstack云计算keystone组件工作介绍
2022/04/20 Servers