【问题标题】:I need to transport a javascript object via query string我需要通过查询字符串传输一个 javascript 对象
【发布时间】:2011-07-06 21:15:46
【问题描述】:

我有一个 javascript 对象,我需要能够通过查询字符串将其传递给 Web 服务。

比如说:

<script type="text/javascript">
var test = new Object();
test.date = new Date();
test.str = "hello world!";
test.list = new Array();
test.list.push('a');
test.list.push('b');
test.list.push('c');
</script>

有没有一种方法可以将该对象序列化为 JSON,然后以某种可以传递到 url 的查询字符串中的方式对其进行压缩/编码?

喜欢:

var destination = 'http://mywebservice?'+encode(serialize(test));
$.get(destination, function(e)) { ... }

提前致谢

【问题讨论】:

  • 大多数现代浏览器都有一个可以使用的原生 JSON 对象:JSON.stringify(myObject);(要支持几乎所有浏览器,请使用来自json.org 的 json2.js)
  • 请注意,IE7 没有 JSON 对象:caniuse.com/json - 所以有一段时间,您应该使用 json2.js
  • 如果您可以选择,您应该考虑通过 POST 而不是 GET 传递您的有效负载。
  • 如果你使用 jQuery,那么你应该将数据作为第二个参数传递给函数。 jQuery 将负责数据的正确编码。我同意使用 JSON,如果可能,您应该使用 POST。

标签: javascript jquery json cross-domain


【解决方案1】:

你想要 Douglas Crockford 的 json2.js:https://github.com/douglascrockford/JSON-js

var test = new Object();
test.date = new Date();
test.str = "hello world!";

var dest = 'http://mywebservice?'+encodeURIComponent( JSON.stringify(test) );

(哦,不要使用 escape(),它已被弃用。始终使用 encodeURIComponent())

但是为什么不使用(会话)cookie 呢?使用 URI 传递数据可能是 SEO、书签、链接等的主要问题。

【讨论】:

  • 在使用 cookie 作为替代方案之前,传递大型有效负载的更合适的方法是使用 POST 或 PUT。 Cookie 应该用于存储状态,而不是用于数据传输。
  • 由于跨域政策,我无法使用 post 或 put。
【解决方案2】:

使用标准的 JSON stringify() 方法:

var destination = encodeURI('http://mywebservice?obj='+ JSON.stringify(test));

【讨论】:

    【解决方案3】:

    你应该记住查询字符串有最大长度(wiki 说它是 2083 个字符),所以你必须小心放置太大的对象。

    【讨论】:

      【解决方案4】:

      我认为你只需要 jQuery post 函数:

      http://api.jquery.com/jQuery.post/

      它确实将数据发布到服务器。在我看来,POST 更适合发送对象,但我忽略了您在服务器上可能存在的限制。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-02
        • 2021-02-04
        • 1970-01-01
        相关资源
        最近更新 更多