我正在演示一个应用程序,我正在教一个类并且遇到了一个错误。我在Sinatra应用程序中演示了POST
请求。这里是我的路线:为什么这个`POST`请求工作并且不起作用
require "bundler/setup"
require "sinatra"
require "sinatra/reloader"
first_names = []
get '/' do
@first_names = first_names
erb :index
end
post '/add_name' do
first_names << params[:first_name]
redirect "/"
end
在index.erb
:
<h1>All Names</h1>
<% @first_names.each do |name| %>
<div><%= name %></div>
<% end %>
<h2>Enter New Name Here and Hit Enter</h2>
<form action="add_name" method="post">
<input name='first_name'>
<input type="submit" value="Add First Name"
</form>
的Gemfile:
source 'https://rubygems.org'
gem "sinatra"
gem "sinatra-contrib"
公告未关闭的标签input
的形式。这实际上起作用。这很好,HTML是越野车?但是,让我出差的部分是,如果我将表格的action
更改为addd_name
(拼写错误)。它不会给我我所期望的错误。 “西纳特拉不知道这个蠢货......”它什么都不做。有什么想法吗?
你确定它可以与缺少的结束标签一起工作吗(点击按钮,而不仅仅是按下回车键)?我认为发生的事情是,缺少的'>'导致浏览器将输入的两个属性':'(这是无效的)和'form'解析为关闭''(它似乎忽略了'/')。在HTML中,'input'元素可以有'form'属性,所以结果是submit按钮与一个不存在的表单相关联,而不是父表单,所以点击它有效。 – matt
欢迎来到Stack Overflow。请阅读“[mcve]”。你的代码有语法错误;两个'first_names'的出现都是未定义的,但是'@ first_names'只能在你的'get'处理程序中分配。正如@matt所说的,你错过了后面的'>',但是浏览器可能能够做一些修正并正确渲染页面。尽管如此,你应该让HTML在语法上也是正确的。 –
我只是把相关的代码,这是问题的一部分。我可以延长我的问题,我明白,我试图成为最小。 –