代码之家  ›  专栏  ›  技术社区  ›  Milan BabuÅ¡kov

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

  •  2
  • Milan BabuÅ¡kov  · 技术社区  · 15 年前

    我有一个由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是不可能的。它必须是一个干净的得到或张贴与页面重新加载。

    6 回复  |  直到 12 年前
        1
  •  7
  •   zombat    15 年前

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

    如果只需将包含javascript对象的JSON表示形式的字符串附加到HTTP请求中,就可以用PHP对其进行JSON解码(),并准备好一个PHP对象。

    编辑:我应该提一下 this page 有一个到javascriptJSON字符串化器的链接,它将把JS对象转换成必要的JSON。

        2
  •  3
  •   Javier    15 年前

    首先,如果您正在更新对象状态,它应该是一个日志。尽量保持你得到的等分。

    第二,即使你不想做任何Ajax,JSON仍然是你的朋友。最简单的方法是将对象序列化为JSON,并在后数据加载中发送结果字符串。有很多方法可以在PHP中解码JSON,您已经设置好了。

        3
  •  2
  •   jimyi    15 年前

    你可以用这个 serialize function ,然后在PHP端将其取消序列化。

        4
  •  1
  •   Pascal MARTIN    15 年前

    get或post可能取决于数据的大小:您可以通过get传递的数据量有一个限制(例如2000字节;更多,取决于浏览器)。

    还有一个需要考虑的问题:如果你在修改数据,你应该使用post;而不是get,这是用来…得到…数据。

    关于格式,我真的不喜欢像自定义函数那样做任何事情,比如base64:我肯定会选择JSON,这是一种原生的JavaScript符号。

    例如,您可以查看:

    有许多JS库可以生成JSON(可能每个JS框架都可以;还有一些独立的库,如 this one );而且由于php 5.2,php中有函数对其进行编码/解码(请参见 json_encode json_decode )

        5
  •  1
  •   Josh Andreas Rehm    12 年前

    如果它只是一个简单的平面数组,您不需要做任何花哨的事情,因为PHP有一个内置的特性来 parse array syntax 来自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']);
    }
    
        6
  •  0
  •   Ahmet Kakıcı    15 年前

    我使用了jquery/json。

    var jsonArray = $.toJSON(jsArray);
    

    然后通过jquery/ajax发送