用Json实现PHP与JavaScript间数据交换的方法详解


Posted in PHP onJune 20, 2013

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
简而论之,不管是xml还是json都是为了方便在客户端与服务器端交互数据的中转站,特别是用于对象型数据,比如最常见的数组。

下面将分别将数组从php传送给javascript,以及将数组从javascript传送给php示例说明,例子比较简单,明白概念即可。不管从php传送给javascript,还是javascript传送给php,json在传送之前都会将对象扁平化即一维化为字符串。
PHP 向 JavaScript 传值
PHP 文件 json.php

<?php 
     $arr = array( 
         'name' => '三水点靠木', 
         'nick' => 'Gonn', 
         'contact' => array( 
             'email' => 'xxxxxxx@163.com', 
             'website' => 'https://3water.com', 
         ) 
     ); 
     $json_string = json_encode($arr); 
     echo "getProfile($json_string)"; 
 ?>

光执行这个文件,其结果如下:
getProfile({"name":"u5e0cu4e9a","nick":"Gonn", 
"contact":{"email":"xxxxxxx@163.com","website":"https://3water.com"}})

json.php 是通过 json_encode 函数将数组扁平化,然后发送,相反有个 json_decode 函数。
那么在 JavaScript 如何调用呢?很简单,定义一个变量获取 PHP 传来的 Json,该 Json 具备对象的特性,我们可以用 array.name 这种方式来获取该 Json 的属性。
<script type="text/javascript"> 
 function getProfile(str) {  
     var arr = str;  
     document.getElementById('name').innerHTML = arr.name;  
     document.getElementById('nick').innerHTML = arr.nick;  
     document.getElementById('email').innerHTML = arr.contact.email; 
     document.getElementById('website').innerHTML = arr.contact.website; 
 }  
 </script> 
 <body> 
 <div id="name"></div> 
 <div id="nick"></div> 
 <div id="email"></div> 
 <div id="website"></div> 
 </body> 
 <script type="text/javascript" src="json.php"></script>

运行结果如下:
三水点靠木 
 Gonn 
 xxxxxxx@163.com 
 https://3water.com

JavaScript 向 PHP 传值
json_encode.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
 <html xmlns="http://www.w3.org/1999/xhtml"> 
 <head> 
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
 <title>json:From javascript To php</title> 
 <script src="json2.js" type="text/javascript"></script> 
 <script type="text/javascript"> 
 function JSON_test(o) 
 { 
     var user = { 
         name:document.getElementById('txt_name').value, 
         email:document.getElementById('txt_email').value, 
         password:document.getElementById('txt_password').value 
     } 
     var json_string = JSON.stringify(user); 
     document.getElementById('txt_json').value=json_string; 
     alert("点击确定后将提交表单"); 
     o.submit(); 
 } 
 </script> 
 </head>  <body> 
     <form id="form1" name="form1" method="post" action="json_encode.php"onsubmit="JSON_test(this);return flase;"> 
         <label for="txt_name">姓名</label> 
         <p><input type="text" name="txt_name" id="txt_name" /></p> 
         <label for="txt_email">邮箱</label> 
         <p><input type="text" name="txt_email" id="txt_email" /></p> 
         <p><label for="txt_password">密码</label></p> 
         <p><input type="text" name="txt_password" id="txt_password" /></p> 
         <p><input type="text" name="txt_json" id="txt_json" /> 
             <label for="button"></label> 
             <input type="submit" name="button" id="button" value="JSON" /> 
         </p> 
     </form> 
 </body> 
 </html>

这里javascript扁平化需要一个插件:http://www.json.org/json2.js,通过JSON.stringify(str)将对象扁平化然后传送给php。
注:另有一个http://www.json.org/json.js,对应的是toJSONString方法。
var last=obj.toJSONString(); //针对json.js 
 var last=JSON.stringify(obj); //针对json2.js

json_encode.php
<?php 
     header('Content-Type: text/html; charset=utf-8'); 
     $json_string = $_POST["txt_json"]; 
     //echo $json_string; 
     if(ini_get("magic_quotes_gpc")=="1") 
     { 
         $json_string=stripslashes($json_string); 
     } 
     $user = json_decode($json_string);      echo var_dump($user); 
     echo '<br /><br /><br /><br />'; 
     echo $user->name.'<br />'; 
     echo $user->email.'<br />'; 
     echo $user->password.'<br />'; 
 ?>

这里就需要用到json_decode()这个函数,然后调用其中数据用 $obj->属性即可。
PHP 相关文章推荐
php简单封装了一些常用JS操作
Feb 25 PHP
php checkbox 取值详细说明
Aug 19 PHP
php循环语句 for()与foreach()用法区别介绍
Sep 05 PHP
php查找字符串出现次数的方法
Dec 01 PHP
thinkphp3.0输出重复两次的解决方法
Dec 19 PHP
PHP+redis实现添加处理投票的方法
Nov 14 PHP
PHP给文字内容中的关键字进行套红处理
Apr 12 PHP
php+ajax登录跳转登录实现思路
Jul 31 PHP
php中html_entity_decode实现HTML实体转义
Jun 13 PHP
PHP后期静态绑定之self::限制实例分析
Dec 21 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
Mar 18 PHP
PHP7 list() 函数修改
Mar 09 PHP
使用php 获取时间今天明天昨天时间戳的详解
Jun 20 #PHP
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
Jun 20 #PHP
解析yii数据库的增删查改
Jun 20 #PHP
在yii中新增一个用户验证的方法详解
Jun 20 #PHP
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
Jun 20 #PHP
php中0,null,empty,空,false,字符串关系的详细介绍
Jun 20 #PHP
解析PHP中数组元素升序、降序以及重新排序的函数
Jun 20 #PHP
You might like
PHP实现文件安全下载
2006/10/09 PHP
PHP4实际应用经验篇(5)
2006/10/09 PHP
set_include_path在win和linux下的区别
2008/01/10 PHP
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
2013/06/29 PHP
PHP数字和字符串ID互转函数(类似优酷ID)
2014/06/30 PHP
CI映射(加载)数据到view层的方法
2016/03/28 PHP
PHP cURL获取微信公众号access_token的实例
2018/04/28 PHP
TP5框架请求响应参数实例分析
2019/10/17 PHP
一个轻量级的javascript库 pj介绍
2010/12/19 Javascript
点击页面任何位置隐藏div的实现方法
2016/09/05 Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
2016/12/15 Javascript
使用Node搭建reactSSR服务端渲染架构
2018/08/30 Javascript
原生JS实现自定义下拉单选选择框功能
2018/10/12 Javascript
Vue 表情包输入组件的实现代码
2019/01/21 Javascript
微信小程序webview实现长按点击识别二维码功能示例
2019/01/24 Javascript
layui清空,重置表单数据的实例
2019/09/12 Javascript
vue实现PC端分辨率适配操作
2020/08/03 Javascript
在Python中操作字典之fromkeys()方法的使用
2015/05/21 Python
一步步教你用Python实现2048小游戏
2017/01/19 Python
利用Python读取文件的四种不同方法比对
2017/05/18 Python
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
解决python中 f.write写入中文出错的问题
2018/10/31 Python
Django框架模板注入操作示例【变量传递到模板】
2018/12/19 Python
浅析Python3中的对象垃圾收集机制
2019/06/06 Python
django连接oracle时setting 配置方法
2019/08/29 Python
python编写计算器功能
2019/10/25 Python
如何在Django中使用聚合的实现示例
2020/03/23 Python
Python中的None与 NULL(即空字符)的区别详解
2020/09/24 Python
基于 HTML5 WebGL 实现的垃圾分类系统
2019/10/08 HTML / CSS
前台文员岗位职责及工作流程
2013/11/19 职场文书
商场拾金不昧表扬信
2014/01/13 职场文书
家长给孩子的表扬信
2014/01/17 职场文书
洗车工岗位职责
2014/03/15 职场文书
药学职务聘任书
2014/03/29 职场文书
2015年初三班主任工作总结
2015/05/21 职场文书
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python