我正在开发一个项目,需要能够标记某些对象以供检查或删除。我使用复选框,然后使用 JavaScript
从复选框获取数据。我正在尝试使用 AJAX
将该数据发送回 Rails Controller
,但我不断收到 404 错误,并且我不确定我做错了什么.
这是 AJAX
调用(review_list 和 purge_list 均已定义,我已经检查过):
function callHandleSelected() {
...
$.post('itemresults/handle_selected', { review: review_list, purge: purge_list },
function(data) {
alert(data);
});
}
这是我为匹配它而编写的路线:
post 'itemresults/handle_selected', to: 'processed_item#handle_selected'
我尝试将 as: :ajax
添加到路由中,看看这是否会产生影响,但运气不佳。
调用 ajax 函数的 HTML 元素如下所示:
<button type="button" class="btn btn-normal" onclick="callHandleSelected()">Mark Selected as Reviewed and/or for Purge</button>
我的 Ruby Controller 中还有一个匹配的 handle_selected
方法。每次我尝试使用 AJAX
方法时,都会收到以下错误:
POST http://localhost:3000/itemresults/handle_selected 404 (Not Found) jquery.js?body=1:9667
jQuery.ajaxTransport.send jquery.js?body=1:9667
jQuery.extend.ajax jquery.js?body=1:9212
jQuery.each.jQuery.(anonymous function) jquery.js?body=1:9358
callHandleSelected processed_item.js?body=1:37
onclick
如果您需要它,这里是 Controller
方法:
def handle_selected
review_list = params[:review]
purge_list = params[:purge]
review_list.each do |item|
item.split("_")
proc_item = ProcessedItem.find(item[1])
proc_item.reviewed = true;
proc_item.save!
end
purge_list.each do |item|
item.split("_")
proc_item = ProcessedItem.find(item[1])
proc_item.purge = true;
proc_item.save!
end
redirect_to processed_items_path()
#add alert
end
最佳答案
我认为问题在于您的请求网址需要一个前导斜杠:
$.post('itemresults/handle_selected' ...
应该是
$.post('/itemresults/handle_selected'
如果没有前导斜杠,它将把 url 添加到当前页面 url 的末尾。
编辑:您还应该在routes.rb 文件中的路径上放置一个前导斜杠。我认为rails“原谅”你不这样做,但我不确定:无论哪种方式,你都应该正确地做到这一点,即使用前导斜杠。
关于javascript - Jquery AJAX 调用未找到 Rails 路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24533002/