【问题标题】:javascript - pass object via postjavascript - 通过帖子传递对象
【发布时间】:2011-05-14 10:33:53
【问题描述】:

我有一个像这样的对象

var obj = { p1:是的, p2:是的, p3:假 }

我希望尝试将此对象作为发布请求的一部分传递。

但是在另一端(在 php 中)我得到的只是

[对象对象]

如何通过邮寄方式发送对象?

基本上我想做的是

我有一个隐藏的输入,并且是这样创建的

<input id="obj" type="hidden" name="obj[]">

这是隐藏表单的一部分。

当按下按钮时,我有

$(#obj).val(obj);
$('form').submit();


请不要建议使用 ajax,因为我必须这样做,因为它是下载动态创建的文件。

【问题讨论】:

    标签: javascript jquery post object


    【解决方案1】:

    您需要在提交之前将对象序列化/转换为字符串。您可以为此使用jQuery.param()

    $('#obj').val(jQuery.param(obj));
    

    【讨论】:

    • A+ 第一个阅读整个问题,你的答案也很完美:) 会尽快接受
    • 甚至递归地工作 {a: {b: 'c', d: {e: 'f', g: 'h'}, i: 'j'} => a[b]=c&a[d][e]=f&a[d][g]=h&i=j
    【解决方案2】:

    您可以考虑使用JSON 表示法将对象发送到服务器。 如果您在页面中包含JSON parser/renderer (现在所有现代浏览器都内置了它,并且在标准模式下也是 IE8) 您可以将对象转换为字符串保留其完整的对象图。大多数服务器端语言现在都可以进行 JSON 解析(例如,在 PHP 中是 json_decode)。您可以在发送表单之前将该字符串放在隐藏的表单字段中。

    看起来像这样:

    $('#obj').val(JSON.stringify(obj));
    $('form').submit();
    

    ...您的服务器端会在表单中看到一个字符串

    { "p1" : true, "p2" : true, "p3" : false }
    

    【讨论】:

    • 请阅读整个问题。需要该表单,因为它正在下载动态生成的文件,您不能从 ajax 数据中下载文件。我也无法将创建的文件存储在任何地方,因此通过 ajax 调用生成文件并返回 url 也不起作用。
    • @Hailwood:不敢相信我错过了。固定。
    • @T.J.干杯,您的新答案将起作用。但是我正在使用@Matt 的答案:)(ps,你得到了我的支持)
    • @Hailwood:很高兴马特的解决方案对你有用,这一切都是为了有选择。 :-)
    • 没错,实际上我更喜欢这个选项,但我已经包含了 jquery,除非它有一个内置的 JSON 解析器,否则我真的不想包含另一个库。大多数浏览器现在已经有了 JSON 解析器,但是... IE6...
    猜你喜欢
    • 2019-06-05
    • 2012-07-16
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 2011-01-31
    • 2015-06-18
    • 1970-01-01
    相关资源
    最近更新 更多