我正在演示一個應用程序,我正在教一個類並且遇到了一個錯誤。我在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在語法上也是正確的。 –
我只是把相關的代碼,這是問題的一部分。我可以延長我的問題,我明白,我試圖成爲最小。 –