Ajax中的JSON格式与php传输过程全面解析


Posted in PHP onNovember 14, 2017

在Ajax中的JSON格式与php传输过程中有哪些要注意的小地方呢?

先来看一下简单通用的JSON与php传输数据的代码

HTML文件:

<input type="button" value="Ajax" id="btn">
 <script>
  var btn = document.getElementById("btn");
  btn.onclick = function(){
    var xhr = getXhr();
    xhr.open("post","测试.php");
    xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
     
    var user = '{"name":"zhangwuji","pwd":"123456"}';
    xhr.send("user="+user);
    xhr.onreadystatechange = function(){
      if(xhr.readyState==4&&xhr.status==200){
        var data = xhr.responseText;
        var json = eval("("+data+")");
        console.log(json);
      }
    }
  }
  function getXhr(){
    var xhr = null;
    if(window.XMLHttpRequest){
      xhr = new XMLHttpRequest();
    }else{
      xhr = new ActiveXObject("Microsoft.XMLHttp");
    }
    return xhr;
  }
 </script>

在整个过程中先要获得AJAX对象,然后用POST请求方式与PHP文件连接,这时候用的是POST方法请求数据,所以这时候还要加上一个请求文件头

xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");这是固定写法直接记下来就可以了。<br><br>上面的是测试代码,创建一个json格式的字符串并用SEND方法传入PHP:

var user = '{"name":"zhangwuji","pwd":"123456"}';

        xhr.send("user="+user);<br><br>这时候要注意了,在构建JSON字符串传输的时候user里面的字符串外面要用单引,里面用双引,不然php那边是不认为你这是JSON 不能正确的进行解析。<br><br><br>这时候看看PHP文件里的代码:

<?php
  // 接收客户端发送的请求数据
  $user = $_POST['user'];
  // 就是一个JSON格式的string字符串

  $json_user = json_decode($user,true);//对json格式的字符串进行解码,转换成PHP变量格式

  // 2. 使用json_encode()函数
  echo json_encode($json_user);//对php变量格式进行编码,转换成JSON格式
?>

json_decode 和json_encode大家从字面的意思都应该可以看出来一点,decode在这这里的作用就是

对json格式的字符串进行解码,转换成PHP变量格式

而encode就是

对php变量格式进行编码,转换成JSON格式在传输回去;

这时候PHP 文件的工作已经结束了,让我们在回到HTML文件看接受数据的onreadystatechange这一块的代码

var data = xhr.responseText;   虽然PHP文件传输回来的是一个JSON格式,但是我们这里接受用的是respenseText所以接收到的只是一个文本格式的字符串<br>这时候我们还要用eval();函数将其转换成JSON格式

* 使用eval()函数进行转换
         使用"()"将其包裹,eval()函数强制将其转换为JSON格式(javascript代码)
         不使用"()"将其包裹,eval()函数将其识别为一个空的代码块

总结

以上所述是小编给大家介绍的Ajax中的JSON格式与php传输过程全面解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
php常用Stream函数集介绍
Jun 24 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
Aug 22 PHP
php中mail函数发送邮件失败的解决方法
Dec 24 PHP
浅谈php的优缺点
Jul 14 PHP
8个必备的PHP功能开发
Oct 02 PHP
PHP生成各种常见验证码和Ajax验证过程
Jan 10 PHP
PHP实现的多文件上传类及用法示例
May 06 PHP
php版微信公众号接口实现发红包的方法
Oct 14 PHP
jquery+thinkphp实现跨域抓取数据的方法
Oct 15 PHP
PHP快速推送微信模板消息
Apr 14 PHP
PHP实现生成数据字典功能示例
May 24 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 #PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
Nov 14 #PHP
PHP中递归的实现实例详解
Nov 14 #PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 #PHP
PHP对称加密算法(DES/AES)类的实现代码
Nov 14 #PHP
浅谈PHP中如何实现Hook机制
Nov 14 #PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 #PHP
You might like
php 连接mysql连接被重置的解决方法
2011/02/15 PHP
PHP合并两个数组的两种方式的异同
2012/09/14 PHP
Linux编译升级php的详细方法
2013/11/04 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
2016/01/07 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
js函数使用技巧之 setTimeout(function(){},0)
2009/02/09 Javascript
jQuery插件实现文字无缝向上滚动效果代码
2016/02/25 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
2016/09/20 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
基于Nodejs利用socket.io实现多人聊天室
2017/02/22 NodeJs
SpringMVC+bootstrap table实例详解
2017/06/02 Javascript
Laravel admin实现消息提醒、播放音频功能
2019/07/10 Javascript
toString.call()通用的判断数据类型方法示例
2020/08/28 Javascript
[02:08]什么藏在DOTA2 TI9“小紫本”里?斧王历险记告诉你!
2019/05/17 DOTA
Python计算两个日期相差天数的方法示例
2017/05/23 Python
Python复制Word内容并使用格式设字体与大小实例代码
2018/01/22 Python
解决Mac安装scrapy失败的问题
2018/06/13 Python
如何使用Python破解ZIP或RAR压缩文件密码
2020/01/09 Python
Python selenium自动化测试模型图解
2020/04/15 Python
使用opencv中匹配点对的坐标提取方式
2020/06/04 Python
pyecharts在数据可视化中的应用详解
2020/06/08 Python
Autopep8的使用(python自动编排工具)
2021/03/02 Python
用canvas做一个DVD待机动画的实现代码
2019/04/12 HTML / CSS
Trina Turk官网:美国时装和泳装品牌
2018/06/10 全球购物
莱德杯高尔夫欧洲官方商店:Ryder Cup Shop
2019/08/14 全球购物
数据库面试要点基本概念
2013/10/31 面试题
校园报刊亭的创业计划书
2014/01/02 职场文书
班组长安全职责
2014/01/05 职场文书
书香校园活动方案
2014/02/28 职场文书
自我鉴定书
2014/03/24 职场文书
临床医师个人自我评价
2014/04/06 职场文书
爱心活动计划书
2014/04/26 职场文书
毕业生自荐信范文
2015/03/05 职场文书
Rhit高效可视化Nginx日志查看工具
2021/11/01 Servers
mysql中整数数据类型tinyint详解
2021/12/06 MySQL
java版 联机五子棋游戏
2022/05/04 Java/Android