【问题标题】:What's the best way to send JavaScript array to PHP script using GET?使用 GET 将 JavaScript 数组发送到 PHP 脚本的最佳方式是什么?
【发布时间】:2009-07-20 21:28:11
【问题描述】:

我有一个由 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。

【问题讨论】:

    标签: php javascript jquery


    【解决方案1】:

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

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

    编辑:我应该提到this page 有一个指向 Javascript JSON 字符串化器的链接,它会将您的 JS 对象转换为必要的 JSON。

    【讨论】:

      【解决方案2】:

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

      其次,即使你不想做任何 AJAX,JSON 仍然是你的朋友。最简单的方法是将您的对象序列化为 JSON 并在 POST 数据加载中发送结果字符串。在 PHP 中解码 JSON 的方法有很多种,一切就绪。

      【讨论】:

      • 至少,json_decode(PHP 5.2 起); Zend_Json 也可以作为独立组件使用(我在 PHP 5.1 服务器上使用过)
      • 好的,我想这个答案几乎可以接受。但是,您能解释一下如何“将我的对象序列化为 JSON”吗?
      【解决方案3】:

      你可以使用这个serialize function,然后在PHP端反序列化。

      【讨论】:

        【解决方案4】:

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

        还有一件事需要考虑:如果你正在修改数据,你应该使用 POST ;不是 GET,它用于...获取...数据。

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

        你可以看看:

        有很多 JS 库可以生成 JSON(可能每个 JS 框架都可以;还有像 this one 这样的独立库);从 PHP 5.2 开始,PHP 中有一些函数可以对其进行编码/解码(参见 json_encodejson_decode

        【讨论】:

        • 我对 JSON 了如指掌。但是“许多图书馆”不是我正在寻找的答案。请说出您正在使用的一种混凝土。
        • 我通常使用 Prototype 作为 JS 框架,这让我获得了更多“仅”JSON 支持(有关此的一些解释,请参阅 prototypejs.org/learn/json)。我也使用过 jQuery,它是 toJSON 插件(参见 docs.jquery.com/Plugins)。
        【解决方案5】:

        如果它只是一个简单的平面数组,你不需要做任何花哨的事情,因为 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']);
        }
        

        【讨论】:

        • 我喜欢这个解决方案,但是有没有 JavaScript 库可以将复杂的 JavaScript 对象/数组编码成这样的 PHP 关联数组?
        • @xmedeko:最明显的方法是在浏览器中JSON.stringify() 并使用 pecl-json 将该字符串解析为 PHP 数组。一般来说,这可能是一个更好的主意,因为它不会在你的 URL 上留下 PHP 疣。
        【解决方案6】:

        我用过 Jquery/JSON。

        var jsonArray = $.toJSON(jsArray);
        

        然后通过 JQuery/Ajax 发送

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-27
          • 2011-05-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多