使用GET将JavaScript数组发送到PHP脚本的最佳方法是什么?

我有一个由jQuery驱动的交互式Web应用程序,用户可以在屏幕上操作可视对象。 完成后,应将JavaScript对象的“状态”发送到PHP以存储到数据库中。 我更喜欢使用GET,但使用POST提交数据的解决方案也是可行的。

我目前正在考虑使用类似base64编码的方法序列化所有JS对象,并使用类似的东西:

var str = encode_objects(); document.location = 'result.php?result='+str; 

但是,有些东西告诉我必须有一些更优雅的方式,而不是在JavaScript中编写我自己的base64编码函数。 是不是已经内置到JavaScript中的东西可以完成这项工作?

更新: PHP中的解码不是问题。 我知道如何在PHP中解码base64,JSON。 问题是如何在JavaScript端编码数据。

AJAX是不可能的。 它必须是一个干净的GET或POST与页面重新加载。

json_decode()应该在这里为你服务。

如果您只是将包含javascript对象的JSON表示的字符串附加到HTTP请求,则可以在PHP中使用json_decode()并准备好PHP对象。

编辑:我应该提到这个页面有一个Javascript JSON字符串的链接,它将你的JS对象转换为必要的JSON。

首先,如果你正在更新对象状态,它应该是一个POST。 尽量保持你所有的GET幂等。

第二,即使你不想做任何AJAX,JSON仍然是你的朋友。 最简单的方法是将对象序列化为JSON并将结果字符串发送到POST dataload中。 有许多方法可以解码PHP中的JSON,你们都已经完成了设置。

您可以使用此序列化函数 ,然后在PHP端反序列化它。

GET或POST可能取决于您的数据大小:您可以通过GET传输的数据有限(类似于2000字节;更多,取决于浏览器)。

还有一件事需要考虑:如果要修改数据,则应使用POST; 不是GET,用来…获取……数据。

关于格式,我真的不会像自定义函数那样做任何像base64这样的东西:我肯定会选择JSON,这是一种原生的Javascript表示法。

你可以看一下:

有许多JS库可以生成JSON(可能每个JS Framework都可以;并且有像这样的 standlone库); 从PHP 5.2开始,PHP中有函数对其进行编码/解码(参见json_encodejson_decode

如果它只是一个简单的平面数组,你不需要做任何花哨的事情,因为PHP有​​一个内置的function来解析 GET / POST变量名的数组语法 。 下面的粗略示例。

Javascript方面:

 // Do the parameter-building however you want, I picked the short/messy way var arrayvalues = [1, 2, 'a']; var querystring = "var[]=" + arrayvalues.join("&var[]="); querystring += "&var[something]=abcdef"; // querystring is now "var[]=1&var[]=2&var[]=a&var[something]=abcdef" 

PHP方面:

 var_dump($_POST); // Remember to validate the data properly! if ( is_array($_POST['var']) ) { count($_POST['var']); echo $_POST['var']['something']; array_map('do_something_interesting', $_POST['var']); } 

我使用过Jquery / JSON。

 var jsonArray = $.toJSON(jsArray); 

然后通过JQuery / Ajax发送它