[转]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来验证,内容类似于下面给出的。你访问看看弹出窗口显示的内容。同理对象等其他的复杂元素也是如此。
-
<script language= >
-
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。
官方已经给出了例子,很好理解
建立对象:
-
-
require_once ( 'JSON.php' );
-
$json = new Services_JSON ( );
将PHP变量(这里是$value)转换成Javascript格式:
-
$value = $json-> encode ( $value );
将Javascript格式的变量(这里是$value)转换成PHP的格式:
-
$value = $json-> decode ( $value );
如果不用JSON那么如何处理复杂结构数据呢?那就需要在传递之前把数据变成基本的字符串,得到的字符串再经过处理变成原始的类型就可以用咯,例如一维数组可以这样处理:
首先定义一种基本上不会在数据中出现的字符串作为分割符,这里用的是~~|~~:
-
define ( 'SPLITE_VAR', '~~|~~' );
-
var splite_var = " ";
传递一维数组value_array之前用~~|~~把数组变成由上面的分隔符分割的字符串value:
-
$value = implode (SPLITE_VAR, $value_array );
-
var value = value_array. join (splite_var );
得到字符串value后根据分隔符把字符串分割成数组value_array,然后可以使用这个数组进行下一步操作:
-
$value_array = explode (SPLITE_VAR, $value );
-
var value_array = value. split (splite_var );
上面只是简单的处理思路,其他类型的数据则需要你自己来灵活处理咯:icon_em04:。
Sajax0.11可以自动转换格式哦~xajax因为直接由方法控制Javascript的显示,估计不需要这样的数据传递,使用XML传输的只需要对XML进行解析就是了,不过这方面我没有实践过。
最后,希望本文能够有点用处吧。
from: http://www.flyinghail.net/archives/10