首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >opal-jquery ajax请求发送格式错误的json字符串。

opal-jquery ajax请求发送格式错误的json字符串。
EN

Stack Overflow用户
提问于 2015-08-19 08:53:15
回答 1查看 165关注 0票数 0

我正在使用opal向后端发送ajax请求,但是当我试图在后端访问它时,json有效负载是错误的。

当我在后端执行puts @params.to_s时,它将显示为:

代码语言:javascript
复制
{"{\"username\":\"some_user\", \"password\":\"some_password\"}"=>nil}

因此,要获得登录详细信息,我必须做:

代码语言:javascript
复制
@params.each do |k,v|
    login_details = JSON.parse(k)
end

我的前端(opal)提交请求如下所示:

代码语言:javascript
复制
    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. 辛纳特拉不恰当地解析请求。

我不知道是哪一个,但我倾向于相信是前者,因为在我切换到前端使用react.rb之前,它运行得很好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-24 12:45:18

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

代码语言:javascript
复制
before do
  request.body.rewind
  req = request.body.read
  puts req
  puts JSON.parse(req)
end

我能够看到,请求到达服务器是正确的和预期的。我不知道为什么,但是西纳屈的反应太过火了,以至于@params说:

代码语言:javascript
复制
{"{\"username\":\"some_user\", \"password\":\"some_password\"}"=>nil}

所以,最后我要做的是

代码语言:javascript
复制
before do
    request.body.rewind
    @request_payload = JSON.parse(request.body.read)
    request.body.rewind
end

在辛纳屈得到任何东西之前,先读出请求体,然后读出我需要的来自@request_payload的params。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32090775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档