ajax-запрос opal-jquery отправляет искаженную строку json
Я использую opal-jquery для отправки ajax-запроса на мой бэкэнд, но полезная нагрузка json искажается, когда я пытаюсь получить доступ к нему на бэкенде.
Когда я делаю puts @params.to_s
на моем бэкэнде это выглядит так:
{"{\"username\":\"some_user\", \"password\":\"some_password\"}"=>nil}
Таким образом, чтобы получить данные для входа, я должен сделать:
@params.each do |k,v|
login_details = JSON.parse(k)
end
Мой запрос на отправку (опал) выглядит так:
def handle_login_submit details
url = "/client/api/auth"
HTTP.post url, payload: details.to_json, dataType: 'json' do |response|
case response.status_code / 100
when 2
puts response.status_code
self.login_state = :return_success
puts response.json
when 4
self.login_state = :return_failed
puts response.status_code
puts response.json
when 5
self.f_message = {type: :error, message: "There was a server error" }
self.login_state = :return_failed
end
end
end
Я точно знаю, что детали правильно отформатированы, так что это не проблема.
Я думаю, в конце концов, все сводится к тому,
opal-jquery отправляет почтовый запрос неправильно
Синатра неправильно обрабатывает запрос.
Я не уверен, какой это, но я склонен полагать, что это первый, потому что он работал нормально, прежде чем я переключился на использование activ.rb для внешнего интерфейса.
1 ответ
После следования совету, в частности, я делаю:
before do
request.body.rewind
req = request.body.read
puts req
puts JSON.parse(req)
end
Мне удалось увидеть, что запрос поступил на сервер правильно и как ожидалось. Я не знаю почему, но Синатра искажал ответ в такой степени, что @params
вышел как
{"{\"username\":\"some_user\", \"password\":\"some_password\"}"=>nil}
так что, в конце концов, я делаю
before do
request.body.rewind
@request_payload = JSON.parse(request.body.read)
request.body.rewind
end
Чтобы прочитать тело запроса до того, как Синатра что-нибудь получит, и просто зачитать нужные мне параметры @request_payload
,