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

时间:2009-07-20 21:28:11

标签: php javascript jquery

我有一个由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页面重新加载。

6 个答案:

答案 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_encodejson_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发送它