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 相关文章推荐
模板引擎Smarty深入浅出介绍
Dec 06 PHP
基于php-fpm 参数的深入理解
Jun 03 PHP
php多文件上传实现代码
Feb 20 PHP
php实现12306余票查询、价格查询示例
Apr 17 PHP
ThinkPHP 3.2 数据分页代码分享
Oct 14 PHP
php常用字符串处理函数实例分析
Nov 22 PHP
PHP保存带BOM文件的方法
Feb 12 PHP
php计算title标题相似比的方法
Jul 29 PHP
简单介绍win7下搭建apache+php+mysql开发环境
Aug 06 PHP
PHP自定义函数获取汉字首字母的方法
Dec 01 PHP
PHP实现登录注册之BootStrap表单功能
Sep 03 PHP
详解使用php-cs-fixer格式化代码
Sep 16 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 mysql_real_escape_string函数用法与实例教程
2013/09/30 PHP
使用php计算排列组合的方法
2013/11/13 PHP
了解PHP的返回引用和局部静态变量
2015/06/04 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
2016/03/07 PHP
PHP登录验证码的实现与使用方法
2016/07/07 PHP
使用PHP json_decode可能遇到的坑与解决方法
2017/08/03 PHP
javascript中的有名函数和无名函数
2007/10/17 Javascript
ExtJs 3.1 XmlTreeLoader Example Error
2010/02/09 Javascript
Jquery调用webService远程访问出错的解决方法
2010/05/21 Javascript
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
通过jquery的$.getJSON做一个跨域ajax请求试验
2011/05/03 Javascript
JQuery 获取json数据$.getJSON方法的实例代码
2013/08/02 Javascript
jquery重新播放css动画所遇问题解决
2013/08/21 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
基于javascript实现窗口抖动效果
2016/01/03 Javascript
angular实现表单验证及提交功能
2017/02/01 Javascript
详解node.js中的npm和webpack配置方法
2018/01/21 Javascript
Vue调用后端java接口的实例代码
2019/10/28 Javascript
[03:40]DOTA2英雄梦之声_第01期_炼金术士
2014/06/23 DOTA
[40:01]OG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
tornado框架blog模块分析与使用
2013/11/21 Python
跟老齐学Python之赋值,简单也不简单
2014/09/24 Python
Python实现求数列和的方法示例
2018/01/12 Python
python机器人运动范围问题的解答
2019/04/29 Python
python and or用法详解
2019/06/26 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
2020/04/23 Python
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
2013/04/22 HTML / CSS
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
美国校服网上商店:French Toast
2019/10/08 全球购物
行政管理人员精品工作推荐信
2013/11/04 职场文书
电脑专业个人求职信范文
2014/02/04 职场文书
乡镇保密工作责任书
2014/07/28 职场文书
群众路线剖析材料
2014/09/30 职场文书
教师党员群众路线教育实践活动心得体会
2014/11/04 职场文书
Java方法重载和方法重写的区别到底在哪?
2021/06/11 Java/Android
了解Kubernetes中的Service和Endpoint
2022/04/01 Servers