0

我正在使用 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

我绝对知道细节的格式正确,所以这不是问题。

我想最后归结为是否

  1. opal-jquery 错误地发送 post 请求

  2. sinatra 不正确地解析请求。

我不确定它是哪一个,但我倾向于相信它是前者,因为在我改用 react.rb 作为前端之前它运行良好。

4

1 回答 1

0

在遵循this的建议后,具体来说我正在做:

before do
  request.body.rewind
  req = request.body.read
  puts req
  puts JSON.parse(req)
end

我能够看到请求按预期正确到达服务器。我不知道为什么,但 sinatra 却在这样一个客场破坏了回应,@params结果是

{"{\"username\":\"some_user\", \"password\":\"some_password\"}"=>nil}

所以,最后我在做

before do
    request.body.rewind
    @request_payload = JSON.parse(request.body.read)
    request.body.rewind
end

在 sinatra 得到任何东西之前读出请求正文,然后读出我需要的参数@request_payload

于 2015-08-24T12:45:18.370 回答