Кодировать строку javascript, чтобы она могла быть передана на сервер - PullRequest
4 голосов
/ 22 мая 2011

Я пытаюсь отправить строку json в запросе get на сервер, вот как это выглядит до кодирования:

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

Естественно, я получаю нулевой указатель при попытке получить эту строку json, затем я гуглюл этот кодировщик 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) на сервер, веб-служба получает данные из базы данных и возвращает документ в формате PDF.

Используя сообщение, я могу отправить правильные данные, и ответ успешно отображается в моей консоли Firebug. Но мне нужно вернуть pdf документ, чтобы переопределить текущую страницу или открыть новое окно / вкладку и вернуться в нее.

Ответы [ 3 ]

3 голосов
/ 22 мая 2011

Я думаю, вы перерабатываете эту проблему. Или кодирование слишком много раз. Или что-то. У вас есть строка 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.

3 голосов
/ 22 мая 2011
var filtersParameter = 'filters=' + encodeURI(JSON.stringify(filters));
1 голос
/ 12 мая 2016
var filtersParameter = 'filters=' + atob(JSON.stringify(filters));

Примечание: atob() метод использует алгоритм base64 для кодирования данных. Эти закодированные данные могут быть легко переданы на сервер, где они могут быть декодированы с использованием соответствующих методов декодирования (используется python base64.b64decode(encoded_string)).

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