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 相关文章推荐
Zend引擎的发展 [15]
Oct 09 PHP
php fckeditor 调用的函数
Jun 21 PHP
PHP 最大运行时间 max_execution_time修改方法
Mar 08 PHP
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
Jun 29 PHP
九个你必须知道而且又很好用的php函数和特点
Aug 08 PHP
教你如何解密 “ PHP 神盾解密工具 ”
Jun 20 PHP
PHP实现linux命令tail -f
Feb 22 PHP
ThinkPHP实现生成和校验验证码功能
Apr 28 PHP
php实现的错误处理封装类实例
Jun 20 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
Jan 29 PHP
PHP中echo与print区别点整理
Mar 09 PHP
PHP基本语法
Mar 31 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爆绝对路径方法收集整理
2012/09/17 PHP
PHP系统命令函数使用分析
2013/07/05 PHP
PHP callback函数使用方法和注意事项
2015/01/23 PHP
Laravel中前端js上传图片到七牛云的示例代码
2017/09/04 PHP
laravel 解决crontab不执行的问题
2019/10/22 PHP
PHP强制转化的形式整理
2020/05/22 PHP
xheditor与validate插件冲突的解决方案
2010/04/15 Javascript
JQuery与Ajax调用新浪API获取短网址的代码
2014/02/07 Javascript
js 针对html DOM元素操作等经验累积
2014/03/11 Javascript
DOM基础教程之模型中的模型节点
2015/01/19 Javascript
JavaScript实现获取dom中class的方法
2015/02/09 Javascript
js实现使用鼠标拖拽切换图片的方法
2015/05/04 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
Bootstrap表单布局
2016/07/19 Javascript
浅谈jQuery中的checkbox问题
2016/08/10 Javascript
JavaScript中对象的不同创建方法
2016/08/12 Javascript
JavaScript仿微信打飞机游戏
2020/07/05 Javascript
Javascript实现倒计时时差效果
2017/05/18 Javascript
详解RequireJs官方使用教程
2017/10/31 Javascript
JS实现为动态创建的元素添加事件操作示例
2018/03/17 Javascript
使用JavaScript中的lodash编写双色球效果
2018/06/24 Javascript
Vue实现PC端靠边悬浮球的代码
2020/05/09 Javascript
详解vue 组件注册
2020/11/20 Vue.js
[01:45]亚洲邀请赛互动指南虚拟物品介绍
2015/01/30 DOTA
利用Python脚本实现ping百度和google的方法
2017/01/24 Python
python pandas中DataFrame类型数据操作函数的方法
2018/04/08 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
2019/07/23 Python
django框架两个使用模板实例
2019/12/11 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
2020/06/29 Python
浅谈keras中的keras.utils.to_categorical用法
2020/07/02 Python
美国领先的眼镜和太阳镜在线零售商:Glasses.com
2019/08/26 全球购物
远东集团网络工程师面试题
2014/10/20 面试题
前台领班岗位职责
2013/12/04 职场文书
党员思想汇报范文
2013/12/30 职场文书
集团公司党的群众路线教育实践活动工作总结
2014/03/03 职场文书
python munch库的使用解析
2021/05/25 Python