对字符串javascript进行编码,以便将其传输到服务器

时间:2011-05-22 14:48:24

标签: javascript json jqgrid

我试图将get请求中的json字符串发送到服务器,这是它在编码之前的样子:

filters={"groupOp":"AND","rules":[{"field":"countrycode","op":"eq","data":"ARG"}]}

当我尝试获取这个json字符串时,我自然会得到空指针,然后我用Google搜索这个encodeURIComponent,它会像这样部分编码这个字符串:

filters={"groupOp"%3A"AND"%2C"rules"%3A[{"field"%3A"countrycode"%2C"op"%3A"eq"%2C"data"%3A"ARG"}]}

但这就是它应该如何工作:

filters=%7B%22groupOp%22%3A%22AND%22%2C%22rules%22%3A%5B%7B%22field%22%3A%22countrycode%22%2C%22op%22%3A%22eq%22%2C%22data%22%3A%22ARG%22%7D%5D%7D

如何获得这个完全编码的字符串,以便我可以在服务器端正确读取它?

我使用get而非发布

的原因

我将此过滤器(json)内容发送到服务器端,Web服务从数据库获取数据并返回pdf文档。

使用post,我能够发送正确的数据,并在我的firebug控制台中成功显示响应。但我需要返回pdf doc来覆盖当前页面或打开新窗口/选项卡并返回该窗口。

3 个答案:

答案 0 :(得分:3)

var filtersParameter = 'filters=' + encodeURI(JSON.stringify(filters));

答案 1 :(得分:3)

我认为你正在解决这个问题。或编码太多次。或者其他的东西。 你有一个JSON字符串,并且你正在尝试对它进行JSON编码。这似乎......无益。

更好的方法可能是生成一个Javascript对象,然后生成JSON.Stringify ,然后将其作为参数传输。

var thing = {
  groupOp : "AND",
  rules : [
    { field : "countrycode", op : "eq", data : "ARG" },
      ...
  ],
    ...
}; 
var stringrep = JSON.stringify(thing);
// post via jQuery
$.ajax({
  type: 'POST',
  url: url,
  data: stringrep,
  dataType: 'json'
  success: function() { ... },
});

通常,对于进出服务器的JSON字符串化消息,您需要使用HTTP POST。 HTTP GET将所有“参数”放在URL中;没有消息体。相比之下,HTTP POST允许您将消息正文附加到HTTP消息,这可以是“任何”。使用这种方法,您不需要对引号和空格进行url编码; JSON消息只是作为HTTP消息的消息体传输。

HTTP POST是应用程序上传图像或传输XML文档等的方式。任何复杂的东西都通过POST传输。

答案 2 :(得分:1)

var filtersParameter = 'filters=' + atob(JSON.stringify(filters));

注意:atob()方法使用 base64 算法对数据进行编码。这个编码数据可以很容易地传递到服务器,在服务器上可以使用相应的解码方法对其进行解码(使用python base64.b64decode(encoded_string))。