使用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表示法。
你可以看一下:
- 维基百科
- http://www.json.org/
有许多JS库可以生成JSON(可能每个JS Framework都可以;并且有像这样的 standlone库); 从PHP 5.2开始,PHP中有函数对其进行编码/解码(参见json_encode
和json_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发送它