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

对字符串javascript进行编码,以便将其传输到服务器,javascript,json,jqgrid,Javascript,Json,Jqgrid,我试图将get请求中的json字符串发送到服务器,以下是编码前的外观: filters={"groupOp":"AND","rules":[{"field":"countrycode","op":"eq","data":"ARG"}]} 当我试图获取这个json字符串时,我自然会以null指针结束,然后我用谷歌搜索了这个encodeURIComponent,它对这个字符串进行了如下部分编码: filters={"groupOp"%3A"AND"%2C"rules"%3A[{"field"%3A

我试图将get请求中的json字符串发送到服务器,以下是编码前的外观:

filters={"groupOp":"AND","rules":[{"field":"countrycode","op":"eq","data":"ARG"}]}
当我试图获取这个json字符串时,我自然会以null指针结束,然后我用谷歌搜索了这个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而不是post的原因

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


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

我认为您在过度处理这个问题。或者编码次数太多。或者别的什么。
var filtersParameter = 'filters=' + encodeURI(JSON.stringify(filters));
您有一个JSON字符串,并且您正在尝试对其进行JSON编码。这似乎……毫无帮助

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

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字符串化消息,您需要使用HTTPPOST。HTTP GET将所有“参数”放入URL中;没有消息正文。相反,HTTPPOST允许您将消息体附加到HTTP消息,可以是“任何内容”。使用这种方法,您不需要对引号和空格进行url编码;JSON消息只是作为HTTP消息的消息体进行传输

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

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

注意:
atob()
方法使用base64算法对数据进行编码。这种编码的数据可以很容易地传递到服务器,在那里可以使用相应的解码方法对其进行解码(在python
base64中。使用b64解码(编码字符串)
).

你到底在哪里发送什么?也许他在寻找JSON。stringify@Tomalak Geret'kal@server-side我正在使用spring mvcnop生成
过滤器=“{\'groupOp\”:\”和\“,\”,“rules\”:[{\'field\”:“countrycode\”,“op\”:“eq\,“data\”:“ARG\”}
别忘了
encodeURI()
。如果我运行它,我会得到:
filters=%7B%22groupOp%22:%22和%22,%22rules%22:%5B%7B%22字段%22:%22countrycode%22,%22op%22:%22eq%22,%22data%22:%22ARG%22%7D%5D%7D
你要把它放到URL中吗?我想我只是吐了我的鞋子。在这种情况下,POST比GET好得多。2018年这里。。我也吐了我的衬衫,就像你的答案,你不必编码任何东西张贴。但问题是我需要返回pdf文档,这就是我使用get的原因,所以我用某些数据填充它。所以我返回呈现的pdf文档,post请求返回成功响应,我可以在firebug中看到它。我需要它在新页面中打开或覆盖当前页面。我不明白;如果你所说的是你需要得到回复,你当然可以从一条POST消息中收到回复,而回复可能是PDF文档。使用post是有意义的,如果你有一堆数据要发送到服务器,它需要生成响应,不管响应是什么。tnx,我现在知道了,它看起来非常优雅,没有所有这些get参数,也不需要对它们进行编码