我有一个由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页面重新加载。
答案 0 :(得分:7)
json_decode()应该在这里为您服务。
如果您只是将包含javascript对象的JSON表示的字符串附加到HTTP请求中,则可以在PHP中使用json_decode()并准备好PHP对象。
编辑:我应该提到this page有一个指向Javascript JSON字符串的链接,它会将您的JS对象转换为必要的JSON。
答案 1 :(得分:3)
首先,如果你正在更新对象状态,它应该是一个POST。尽量保持你所有的GET幂等。
第二,即使你不想做任何AJAX,JSON仍然是你的朋友。最简单的方法是将对象序列化为JSON并将结果字符串发送到POST dataload中。有许多方法可以在PHP中解码JSON,而且你已经完成了设置。
答案 2 :(得分:2)
您可以使用此serialize function,然后在PHP端反序列化它。
答案 3 :(得分:1)
GET或POST可能取决于您的数据大小:您可以通过GET传输的数据有限(大约2000字节;更多,取决于浏览器)。
还有另一件事需要考虑:如果要修改数据,则应使用POST;不是GET,用于...获取......数据。
关于格式,我真的不会像自定义函数那样做任何像base64这样的东西:我肯定会选择JSON,这是一种原生的Javascript表示法。
您可以查看:
有许多JS库可以生成JSON(可能每个JS Framework都可以;并且有像this one这样的立场库);从PHP 5.2开始,PHP中有函数对其进行编码/解码(参见json_encode
和json_decode
)
答案 4 :(得分:1)
如果它只是一个简单的平面数组,你不需要做任何花哨的事情,因为PHP有一个来自GET / POST变量名的parse array syntax内置功能。下面的粗略例子。
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']);
}
答案 5 :(得分:0)
我使用过Jquery / JSON。
var jsonArray = $.toJSON(jsArray);
然后通过JQuery / Ajax发送它