Почтовые запросы Crossrider ajax с полезной нагрузкой JSON не принимаются правильно в бэкэнде Rails

У меня есть объект JSON, который я хочу отправить на удаленный сервер (Rails). Все попытки отправить его на сервер как «application/json» терпят неудачу, когда параметры POST преобразуются где-то в строку в кодировке URL. Например:

appAPI.request.post({
  url: "http://mybackend",
  postData: {hello: 'world', foo: 'bar'},
  onSuccess: function(response) {
    console.log("postback succeeded with response: " + response)
  },
  onFailure: function(httpCode) {
    console.log("postback failure: " + httpCode)
  },
  contentType: 'application/json'
});

Возвращает HTTP 500 с сервером, жалующимся на искаженный объект JSON:

Error occurred while parsing request parameters.
Contents:

MultiJson::LoadError (784: unexpected token at 'hello=world&foo=bar'): 
  /Users/hammady/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/json/common.rb:148:in `parse'
  ...

Что еще мне нужно сделать, чтобы отправить объект JSON на мой сервер Rails?


person hammady    schedule 01.10.2013    source источник
comment
прочитайте эту ссылку. ЛМК, если что-то непонятно coderwall.com/p/c-mu-a   -  person Renaissance    schedule 01.10.2013
comment
Попробуйте сначала преобразовать объект в строку. postData: JSON.stringify({привет: 'мир', foo: 'бар'})   -  person Bnaya    schedule 02.10.2013
comment
@Bnaya это решило мою проблему, пожалуйста, добавьте это как решение!   -  person hammady    schedule 06.10.2013
comment
Готово: stackoverflow.com/a/19361568/711152   -  person Bnaya    schedule 14.10.2013


Ответы (2)


Сначала вам нужно преобразовать объект в строку.

postData: JSON.stringify({hello: 'world', foo: 'bar'});
person Bnaya    schedule 14.10.2013

используйте JSON.stringify, чтобы преобразовать размещенные данные

appAPI.request.post({
  url: "http://mybackend",
  postData: JSON.stringify({hello: 'world', foo: 'bar'}),
  onSuccess: function(response) {
    console.log("postback succeeded with response: " + response)
  },
  onFailure: function(httpCode) {
    console.log("postback failure: " + httpCode)
  },
  contentType: 'application/json'
});
person Ashraf Bashir    schedule 12.10.2013