javascript - 从浏览器检索用户输入以在控制器中用于第三方查询字符串 rails
问题描述
我只是想让用户从我的form_tag
.
一般的想法是用户在text_field_tag
应用程序/视图/页面/home.html.erb
<div>
<%= form_tag root_path, method: :get, remote: true do %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag 'Search', name: nil, class: 'submit' %>
<% end %>
</div>
我有一些 JavaScript 来获取参数并将它们附加到浏览器中的当前 url。
/main/app/assets/javascript/table.js
function appendParamToUrl() {
var pages = '';
var term = $('#search').val();
window.history.pushState( pages, 'url', '?search=' + term );
}
然后我尝试从 rails 控制器中检索这些参数以添加到查询字符串中,以便对第三方进行 api 调用。
def home
term = params[:search]
@stats = HTTParty.get("https://api.ritekit.com/v1/stats/history/#{term}?tags=&client_id=81c7fa4e99adc98e9455c86ee38a4c1bbe3f97328732")
gon.queries = @stats
end
Rails 控制台显示正确的参数
Started GET "/?utf8=%E2%9C%93&search=trump" for 148.75.220.61 at 2018-08-21 00:28:49 +0000
Cannot render console from 148.75.220.61! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by PagesController#home as JS
Parameters: {"utf8"=>"✓", "search"=>"trump"}
User Load (0.6ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["id", 1], ["LIMIT", 1]]
Rendering pages/home.html.erb within layouts/application
Rendered pages/home.html.erb within layouts/application (1.2ms)
Rendered shared/_nav.html.erb (0.8ms)
Completed 200 OK in 1182ms (Views: 71.4ms | ActiveRecord: 0.6ms)
但是,除非我重新加载页面,否则当term = params[:search]
出现时nil
,参数会留在浏览器中,然后会发生预期的结果。检索到的数据用于填充我设置的数据表。
任何帮助将不胜感激。
解决方案
问题是你试图term = params[:search]
在你的控制器中检索这将从form_tag
部件中获取价值,因为这是一个远程表单,你需要设置如下:
respond_to do |format|
format.js {}
end
您现在可以将所需数据附加到此home.js.erb
文件中的表中。您不需要编写像appendParamToUrl
.
---UPDATE---
<%= text_field_tag :search, params[:search] %>
这行会在页面加载时获取url中的值,所以第一次params[:search]为nil。而当你点击提交按钮时,服务器会感到困惑,因为你有两个参数[:search],一个在 url 中,另一个在 text_field_tag 中。
您需要确定首先需要获得哪个。
如何将搜索更改为在 url 中查询,然后您可以在控制器中检查 param[:query] 和 param[:search],我确信其中一个具有非 nil 值。
推荐阅读
- python - botocore.errorfactory.AuthorizationErrorException
- node.js - 使用 babel 递归地编译服务器文件
- android - 如何解决 Gridview 项目重叠问题?
- r - data.table:第一次出现的行中的字段
- c# - ADO .NET 和 IQueryable
- c# - 如何使用 Selenium,C# 从 dom 元素中获取所有 css 样式
- python - 通过python没有命令行的Telegram Bot
- python - 通过调整帧从视频中获取帧?
- cakephp - CakeDC 带有前缀的论坛插件
- ios - 无法从 iOS 分享到 Facebook Messenger