opal-jquery ajax 请求发送格式错误的 json 字符串
opal-jquery ajax request sending malformed json string
我正在使用 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 错误发送 post 请求
sinatra 未正确解析请求。
我不确定它是哪一个,但我倾向于相信它是前者,因为在我切换到使用 react.rb 作为前端之前它工作正常。
在听从 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
。
我正在使用 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 错误发送 post 请求
sinatra 未正确解析请求。
我不确定它是哪一个,但我倾向于相信它是前者,因为在我切换到使用 react.rb 作为前端之前它工作正常。
在听从 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
。