如何使用AJAX将数据从ruby控制器发送到应用程序javascript?
我的application.js中有一个AJAX调用,它向我的events_controller#check action发送3条数据:如何使用AJAX将数据从ruby控制器发送到应用程序javascript?,javascript,jquery,ruby-on-rails,ruby,ajax,Javascript,Jquery,Ruby On Rails,Ruby,Ajax,我的application.js中有一个AJAX调用,它向我的events_controller#check action发送3条数据: //application.js $(document).on('click', "#check-button", function(){ ... $.ajax({ url: '/events/check', data: {checkList: chec
//application.js
$(document).on('click', "#check-button", function(){
...
$.ajax({
url: '/events/check',
data: {checkList: checkList , selected_date: selectedDate , length: length },
}
);
});
#events_controller.rb
def check
checkList = params[:checkList]
selected_date = params[:selected_date]
length = params[:length]
busy_array = Array.new #this needs to be rendered in the view
...
busy_array.push(user.id) #busy_array is a list of user ids from database
end
#routes.rb
resources :events do
get :check, on: :collection
end
我的检查操作:
//application.js
$(document).on('click', "#check-button", function(){
...
$.ajax({
url: '/events/check',
data: {checkList: checkList , selected_date: selectedDate , length: length },
}
);
});
#events_controller.rb
def check
checkList = params[:checkList]
selected_date = params[:selected_date]
length = params[:length]
busy_array = Array.new #this needs to be rendered in the view
...
busy_array.push(user.id) #busy_array is a list of user ids from database
end
#routes.rb
resources :events do
get :check, on: :collection
end
观点:
<button id="check-button" type="button">Check</button>
<div class = "col-md-6" id="unavailable">
<h2>Unavailable on this day:</h2>
<ol id="unavailable-list">
<li>THIS LIST SHOULD BE POPULATED BY BUSY_ARRAY</li>
</ol>
</div>
检查
当日不可用:
此列表应由忙碌的\u数组填充
现在,我需要将数据从events\u controller\check
发送回视图,但我不知道如何将busy\u数组
发送到events\new.html.erb
感谢您的帮助,我是ruby/JS初学者对于ruby on Rails中的真实AJAX请求,您需要以JS格式发送check action的响应 事件\u控制器.rb
def check
checkList = params[:checkList]
selected_date = params[:selected_date]
length = params[:length]
@events = Event.where("checklist = ? and date = ?, checkList, selected_date).limit(length.to_i)
...
respond_to do |format|
format.js
end
end
$("#unavailable-list").append('<%= escape_javascript( render :partial => "events/event", :collection => @events ) %>');
<li><%= event.name %></li>
现在,在您的视图中,您将看到check.js.erb,而不是check.html.erb。在这个Javascript文件中,您可以访问@variables并呈现部分或任何地方
检查.js.erb
def check
checkList = params[:checkList]
selected_date = params[:selected_date]
length = params[:length]
@events = Event.where("checklist = ? and date = ?, checkList, selected_date).limit(length.to_i)
...
respond_to do |format|
format.js
end
end
$("#unavailable-list").append('<%= escape_javascript( render :partial => "events/event", :collection => @events ) %>');
<li><%= event.name %></li>
$(“#不可用列表”).append(“'events/event”“,:collection=>@events)%%>”;
\u event.html.erb
def check
checkList = params[:checkList]
selected_date = params[:selected_date]
length = params[:length]
@events = Event.where("checklist = ? and date = ?, checkList, selected_date).limit(length.to_i)
...
respond_to do |format|
format.js
end
end
$("#unavailable-list").append('<%= escape_javascript( render :partial => "events/event", :collection => @events ) %>');
<li><%= event.name %></li>
我将busy_数组更改为events数组,因为我不知道什么是busy_数组,但您可以更改它
这是AJAX请求的流程
busy_array = Array.new #this needs to be rendered in the view
如果必须在视图中提供,则需要定义一个@instance
变量:
def check
checkList = params[:checkList]
selected_date = params[:selected_date]
length = params[:length]
@busy_array = Array.new
...
@busy_array.push(user.id) #busy_array is a list of user ids from database
end
每次调用控制器#操作
时,操作
中的数据/变量都由绑定
在视图中输出数据
要求变量在类的整个实例中可用(而不仅仅是操作/函数)。因此,@busy\u数组
修理
视图
是事件控制器
类实例的一部分,但不在检查
方法的范围内。当您向Rails发送请求时,它使用控制器的一个实例来编译一组HTML以返回到您的浏览器
例如,您可以将事件控制器
流汇总如下:
Request > Routing > EventsController.new(request).action > Returned HTML
如果手动设置EventsController.new(请求)
,则会出现以下情况:
@event = EventsController.new request
@event.check #-> "busy_array" locally scoped to this function
@event.response #-> outputs view code.... @busy_array needs to be instance var
如果您仔细阅读以下内容,您会更好地理解:
好的,如果我做了$(“#不可用列表”).append(“”),它将使每个条目成为一个元素?如果@busy\u数组不是ActiveRecordRelation,则必须指定要渲染的部分,如render:partial=>“events/event”,:collection=>@busy\u数组
。然后,在你的_event.html.erb中,你可以添加你的 元素。你介意在你的答案中给我看一下吗?对不起,我不完全明白你的意思。我如何知道它是否是活动记录关系?我在controllerok中创建了它谢谢,我的busy_数组保存了数据库中的用户,因此如果我有(而不是_event.html.erb)一个_busy.html.erb,我可以呈现:partial=>“events/busy”,:collection=>@busy_数组,在_busy.html.erb中我可以写 ?谢谢,如果它不是post请求,而只是get请求,这有关系吗?一点也不重要,但您必须这样定义它。Ajax默认为POST