【问题标题】:Retrieving params with sinatra on form submit. Params is undefined在表单提交时使用 sinatra 检索参数。参数未定义
【发布时间】:2018-03-13 06:07:32
【问题描述】:

提交表单后,我无法访问 Sinatra 中的参数。这是我的表格:

function submitForm(e) {
    e.preventDefault();

    $.ajax({
      type: 'POST',
      url: '/mix_addresses',
      //grab the inputs from address_section
      //data: $('.add_address_section .add_address_field').map(function() { return $(this).val() }),
      data: [1,2,3],
      dataType: "json",
      success: function(data) {
        debugger;
      }
    });
  }

这是我的终点:

require 'sinatra'
require 'jobcoin_client'

get '/' do
  erb :add_coins
end

post '/mix_addresses' do
  puts params
end

我正在到达终点,但参数是空白的。不应该是[1,2,3]吗?相反,它是:

{"undefined"=>""}

有人知道我做错了吗?

【问题讨论】:

  • 您检查过请求发送的内容吗?

标签: sinatra


【解决方案1】:

这里有几个问题:)

Sinatra 配置

主要问题来自于 Sinatra 默认不处理 JSON 有效负载这一事实。如果您想发送 JSON 有效负载,那么最简单的解决方案是:

  1. 要将rack-contrib 添加到您的 Gemfile,
  2. 然后,在您的 sinatra 应用程序中要求它:require rack/contrib
  3. 并加载处理此问题的中间件:use Rack::PostBodyContentTypeParser

你应该很高兴!

来源:几个 SO 帖子引用了这个问题,例如 hereherehere

jQuery ajax 调用

另外,请注意您的请求可能存在一些问题:

  1. 您需要为 JSON 有效负载使用 key: value 格式:{ values: [1,2,3] }
  2. 您需要在发送 JSON 有效负载之前对其进行字符串化:data: JSON.stringify( ... )
  3. 您需要将请求内容类型设置为application/jsondataType与服务器返回的数据有关,并没有说明您的请求格式,请参阅jQuery ajax documentation for more details)。李>

最终,您应该在客户端得到这样的结果:

function submitForm(e) {
  e.preventDefault();

  $.ajax({
    type: 'POST',
    url: '/mix_addresses',
    contentType: 'application/json',
    dataType: 'json',
    data: JSON.stringify({ values: [1,2,3] }),
    success: function(data) {
      debugger;
    }
  });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 2015-09-29
    • 2013-04-06
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 2019-10-22
    相关资源
    最近更新 更多