设为首页 收藏本站
查看: 707|回复: 0

[经验分享] [转]PHP与Javascript之间复杂结构数据的传递

[复制链接]

尚未签到

发表于 2017-4-4 06:43:30 | 显示全部楼层 |阅读模式
  [转]PHP与Javascript之间复杂结构数据的传递


说道Ajax其实质就是通过Javascript向服务器提交请求,获得服务器返回的信息,然后再使用Javascript进行处理,更新网页,从而实现最明显的表现,无刷新更改网页内容。其中Jvascript与服务器脚本语言之间的信息传递是很重要的一个部分,一般来说这一部分应该由XML承担,但是一般却不一定非得传递XML,数组、字符串甚至对象也都可以传递,这里讨论一下PHP和Javascript之间复杂结构数据的传递问题。

  用过Sajax0.10(目前官方公开的最新版)的朋友应该知道,如果直接在PHP的函数中return一个数组,或者通过Javascript向服务器端传递一个数组,在另一端是没法处理的,这是为什么呢?其实很容易理解,不同的语言之间数组的结构是不一样,当然这不只是数组,还包括对象等等。
  举一个很简单的例子,PHP数组array(1,2,3)在Javascript的格式是[1,2,3],你可以写一个简单的html来验证,内容类似于下面给出的。你访问看看弹出窗口显示的内容。同理对象等其他的复杂元素也是如此。 
普通文本
JavaScript:

  • <script language="javascript">
  • var v;
  • v = [1,2,3];
  • alert(v[1]);
  • </script>



  解决这个问题最好的方法是JSON(JavaScript Object Notation),因为这里是讨论PHP嘛,所以我们关心的是JSON in PHP——JSON-PHP和PHP-JSON。JSON-PHP是一个类,可以从PEAR网站获得;PHP-JSON是PHP的module,虽然安装module可以一劳永逸的解决数据结构转换问题,但是毕竟不是所有人都有独立服务器,可以随意安装module的,所以我们主要关心的是JSON-PHP。
  官方已经给出了例子,很好理解
建立对象:
普通文本
PHP:


  • require_once('JSON.php');
  • $json = new Services_JSON();



  将PHP变量(这里是$value)转换成Javascript格式:
普通文本
PHP:

  • $value = $json->encode($value);



  将Javascript格式的变量(这里是$value)转换成PHP的格式:
普通文本
PHP:

  • $value = $json->decode($value);



  如果不用JSON那么如何处理复杂结构数据呢?那就需要在传递之前把数据变成基本的字符串,得到的字符串再经过处理变成原始的类型就可以用咯,例如一维数组可以这样处理:
  首先定义一种基本上不会在数据中出现的字符串作为分割符,这里用的是~~|~~:
普通文本
PHP:

  • define('SPLITE_VAR', '~~|~~');



普通文本
JavaScript:

  • var splite_var = "<?php echo SPLITE_VAR ?>";



  传递一维数组value_array之前用~~|~~把数组变成由上面的分隔符分割的字符串value:
普通文本
PHP:

  • $value = implode(SPLITE_VAR, $value_array);



普通文本
JavaScript:

  • var value = value_array.join(splite_var);



  得到字符串value后根据分隔符把字符串分割成数组value_array,然后可以使用这个数组进行下一步操作:
普通文本
PHP:

  • $value_array = explode(SPLITE_VAR, $value);



普通文本
JavaScript:

  • var value_array = value.split(splite_var);



  上面只是简单的处理思路,其他类型的数据则需要你自己来灵活处理咯:icon_em04:。
  Sajax0.11可以自动转换格式哦~xajax因为直接由方法控制Javascript的显示,估计不需要这样的数据传递,使用XML传输的只需要对XML进行解析就是了,不过这方面我没有实践过。
  最后,希望本文能够有点用处吧。
  from: http://www.flyinghail.net/archives/10

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-359794-1-1.html 上篇帖子: 专家预言:PHP将比Java更好更受欢迎 下篇帖子: 《PHP Web2.0 开发实战》学习笔记1
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表