Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单Sinatra代理在jQuery POST调用中的行为与预期不符_Jquery_Ruby_Sinatra - Fatal编程技术网

简单Sinatra代理在jQuery POST调用中的行为与预期不符

简单Sinatra代理在jQuery POST调用中的行为与预期不符,jquery,ruby,sinatra,Jquery,Ruby,Sinatra,我有一份简单的委托书,是用西纳特拉语写的。此块设计用于传递对api/*的所有调用。事情在当地按预期进行。然而,当我推到服务器时,奇怪的事情开始发生。使用$.post的jQuery调用会导致对API的GET请求,而不是预期的post。从“代理”服务器日志中,我看到一个jQuery调用产生两个日志项,一个POST,然后是GET,后者的结果似乎就是jQuery返回的结果。我一辈子都搞不清楚这里到底发生了什么,如果能得到一些提示,那就太棒了 # Proxy all requests to /api/*

我有一份简单的委托书,是用西纳特拉语写的。此块设计用于传递对api/*的所有调用。事情在当地按预期进行。然而,当我推到服务器时,奇怪的事情开始发生。使用$.post的jQuery调用会导致对API的GET请求,而不是预期的post。从“代理”服务器日志中,我看到一个jQuery调用产生两个日志项,一个POST,然后是GET,后者的结果似乎就是jQuery返回的结果。我一辈子都搞不清楚这里到底发生了什么,如果能得到一些提示,那就太棒了

# Proxy all requests to /api/*
proxy = lambda do |path|
  uri = URI('http://' + HOST + '/api/' + path)
  uri.query = URI.encode_www_form(params) if (request.request_method == 'GET')

  # New request data
  data = {
    :url => 'http://' + uri.host + ':' + uri.port.to_s + uri.request_uri,
    :method => request.request_method,
    :headers => request_headers,
    :query => uri.query
  }

  http = Net::HTTP.new(uri.host, uri.port)

  if request.request_method == 'POST'
    req = Net::HTTP::Post.new uri.request_uri
    request.body.rewind
    req.form_data = CGI.parse request.body.read
  else
    req = Net::HTTP::Get.new uri.request_uri
  end

  # Passthrough headers
  data[:headers]['host'] = uri.host + ':' + uri.port.to_s
  data[:headers].each { |key, val| req[key] = val }

  # Log request data
  res = http.request req

  # Return
  status res.code
  content_type 'application/json'
  headers res.to_hash
  body res.body
end

get '/api/*', &proxy
post '/api/*', &proxy
大法