Мне нужно транспортировать объект JavaScript через строку запроса - PullRequest
3 голосов
/ 02 марта 2011

У меня есть объект javascript, который необходимо передать веб-службе через строку запроса.

Скажем, например:

<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)) { ... }

Заранее спасибо

Ответы [ 4 ]

8 голосов
/ 02 марта 2011

Вам нужен 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, для закладок, для ссылок и т. Д.

5 голосов
/ 02 марта 2011

Вы должны помнить, что строка запроса имеет максимальную длину (в вики сказано, что это 2083 символа), поэтому вы должны быть осторожны с размещением там слишком больших объектов.

0 голосов
/ 02 марта 2011

Я думаю, вам нужна только функция поста jQuery:

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

Она выполняет отправку данных на сервер.По моему мнению, POST лучше подходит для отправки объектов, но я игнорирую ограничения, которые могут иметься на сервере.

0 голосов
/ 02 марта 2011

Используйте стандартный метод JSON stringify():

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...