在表单提交中检索与sinatra的参数。参数是不确定的

时间:2018-01-26 23:11:57

标签: sinatra

我在提交表格后无法访问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"=>""}

任何人都能看到我做错了什么?

1 个答案:

答案 0 :(得分:1)

这里有几个问题:)

Sinatra配置

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

  1. rack-contrib添加到您的Gemfile
  2. 然后,在你的sinatra应用中需要它:require rack/contrib
  3. 并加载处理此问题的中间件:use Rack::PostBodyContentTypeParser
  4. 你应该好好去!

    来源:有几篇SO帖子引用此问题,例如hereherehere

    jQuery ajax call

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

    1. 您需要为您的JSON有效负载使用key: value格式:{ values: [1,2,3] }
    2. 您需要在发送之前对JSON有效内容进行字符串化:data: JSON.stringify( ... )
    3. 您需要将请求内容类型设置为application/jsondataType与服务器返回的数据相关,并且没有说明您的请求格式,见jQuery ajax documentation for more details)。
    4. 最终,你应该在客户端得到类似的东西:

      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;
          }
        });
      }