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边学边教》(01.开篇――准备工作)
Dec 13 PHP
php中用foreach来操作数组的代码
Jul 17 PHP
php中操作memcached缓存进行增删改查数据的实现代码
Aug 15 PHP
php实现utf-8转unicode函数分享
Jan 06 PHP
php实现excel中rank函数功能的方法
Jan 20 PHP
PHP实现自动识别Restful API的返回内容类型
Feb 07 PHP
PHP实现多文件上传的方法
Jul 08 PHP
Yii基于数组和对象的Model查询技巧实例详解
Dec 28 PHP
Laravel5权限管理方法详解
Jul 26 PHP
php is_executable判断给定文件名是否可执行实例
Sep 26 PHP
thinkPHP5.0框架事务处理操作简单示例
Sep 07 PHP
Laravel 不同生产环境服务器的判断实践
Oct 15 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_data_seek]
2012/11/01 PHP
PHP安全下载文件的方法
2016/04/07 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
JavaScript判断一个URL链接是否有效的实现方法
2011/10/08 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
2012/08/14 Javascript
简单的js表单验证函数
2013/10/28 Javascript
js转化毫秒为时间格式代码
2014/04/10 Javascript
JS来动态的修改url实现对url的增删查改
2014/09/05 Javascript
Javascript实现禁止输入中文或英文的例子
2014/12/09 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
2014/12/16 Javascript
javascript实现的字符串与十六进制表示字符串相互转换方法
2015/07/17 Javascript
JavaScript精炼之构造函数 Constructor及Constructor属性详解
2015/11/05 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
基于JavaScript实现简单的随机抽奖小程序
2016/01/05 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
jQuery图片切换动画效果
2017/02/28 Javascript
借助node实战JSONP跨域实例
2017/03/30 Javascript
JS实现统计字符串中字符出现个数及最大个数功能示例
2018/06/04 Javascript
vue移动端下拉刷新和上拉加载的实现代码
2018/09/08 Javascript
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
2019/09/06 Javascript
基于form-data请求格式详解
2019/10/29 Javascript
Vue如何基于vue-i18n实现多国语言兼容
2020/07/17 Javascript
Python入门学习之字符串与比较运算符
2015/10/12 Python
Python的for和break循环结构中使用else语句的技巧
2016/05/24 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
2017/07/12 Python
python利用sklearn包编写决策树源代码
2017/12/21 Python
Python中.join()和os.path.join()两个函数的用法详解
2018/06/11 Python
python将txt文件读入为np.array的方法
2018/10/30 Python
Pyecharts绘制全球流向图的示例代码
2020/01/08 Python
Python判断字符串是否为合法标示符操作
2020/09/03 Python
Python中qutip用法示例详解
2020/10/02 Python
配置管理计划的主要内容有哪些
2014/06/20 面试题
2014乡镇机关党员个人对照检查材料思想汇报
2014/10/09 职场文书
交通事故赔偿协议书
2014/10/16 职场文书
走进科学观后感
2015/06/18 职场文书
初中语文教学随笔
2015/08/15 职场文书