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

[转]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:
  1. <script language= "javascript">
  2. var v;
  3. v = [ 1, 2, 3 ];
  4. alert (v [ 1 ] );
  5. </script>

  解决这个问题最好的方法是JSON(JavaScript Object Notation),因为这里是讨论PHP嘛,所以我们关心的是JSON in PHP——JSON-PHPPHP-JSONJSON-PHP是一个类,可以从PEAR网站获得;PHP-JSONPHP的module,虽然安装module可以一劳永逸的解决数据结构转换问题,但是毕竟不是所有人都有独立服务器,可以随意安装module的,所以我们主要关心的是JSON-PHP

  官方已经给出了例子,很好理解
建立对象:

PHP:
  1. require_once ( 'JSON.php' );
  2. $json = new Services_JSON ( );

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

PHP:
  1. $value = $json-> encode ( $value );

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

PHP:
  1. $value = $json-> decode ( $value );

  如果不用JSON那么如何处理复杂结构数据呢?那就需要在传递之前把数据变成基本的字符串,得到的字符串再经过处理变成原始的类型就可以用咯,例如一维数组可以这样处理:

  首先定义一种基本上不会在数据中出现的字符串作为分割符,这里用的是~~|~~:

PHP:
  1. define ( 'SPLITE_VAR', '~~|~~' );
JavaScript:
  1. var splite_var = "<?php echo SPLITE_VAR ?>";

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

PHP:
  1. $value = implode (SPLITE_VAR, $value_array );
JavaScript:
  1. var value = value_array. join (splite_var );

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

PHP:
  1. $value_array = explode (SPLITE_VAR, $value );
JavaScript:
  1. var value_array = value. split (splite_var );

  上面只是简单的处理思路,其他类型的数据则需要你自己来灵活处理咯:icon_em04:。

  Sajax0.11可以自动转换格式哦~xajax因为直接由方法控制Javascript的显示,估计不需要这样的数据传递,使用XML传输的只需要对XML进行解析就是了,不过这方面我没有实践过。

  最后,希望本文能够有点用处吧。

from: http://www.flyinghail.net/archives/10

你可能感兴趣的:(JavaScript,数据结构,Ajax,PHP,json)