我提到了很多关于这个问题的文章,之后我变得更加困惑,而不是清楚地理解任何东西。这主要是因为rails有许多相同的方式。
进行ajax调用的老方法: 1. Javascript监视某些事件。2.当该事件发生时(例如:按钮单击),您可以在javascript中捕获该事件,进行ajax调用,处理该ajax调用中的成功或错误响应。
试图用rails 5实现这一点,rails的方法是: 1.在从控制器获取数据到javascript方面有问题。
主计长:
class SomeController < ApplicationController
def show
end
def foo
@result = 'Hello World'
respond_to do |format|
format.js {@result}
end
end
end
在我看来,我有一个具有remote: true的表单,负责将AJAX请求提交给控制器中的foo操作。类似于:
=form_tag url_for(action: 'foo'), remote: true, id: 'element-form' do
=some input ....
=some input ...
Javascript: /view/ foo.js.erb /foo.js.erb中的
$('#element-form').on ('ajax:complete', doSomething)
function doSomething(event, data) {
console.log(data) // prints undefined
}
$('#element-form').on ('ajax:error', doSomethingElse)
function doSomethingElse(event, data) {
console.log(data) // prints undefined
}
当我在浏览器中检查ajax调用时,我可以看到我得到了一个有效的响应,其中包括在foo.js.erb文件中定义的整个javascript。
我最大的问题不是任何特定的代码,而是理解所有的代码是如何组合在一起的。总之,我似乎无法获得在rails 5环境中进行ajax请求时发生的数据流或请求响应周期。有关此主题的任何参考资料的链接将受到高度赞赏。
发布于 2018-03-11 03:47:27
因此,我终于能够让整个ajax请求响应周期正常工作。我就是这么安排的。
控制器逻辑保持不变。为了更好地控制ajax请求,我在some_controller.js
文件中包含了逻辑。正如Sergio在他的一个评论中指出的,在他的答复中,我认为在*.js.erb文件中添加任何回调方法为时已晚。
因此,javascript代码如下所示:
$(document).ready(function() {
$('#some_element').on('some_event', function doSomething() {
makeAjaxCall();
});
function makeAjaxCall() {
Rails.ajax({
type: "POST",
data: {mock_data: mock_data},
url: 'post_url',
success: function(response){...},
error: function(error){...}
});
}
});
现在,重要的部分是在rails控制器(action)中的post方法完成时会发生什么。我相信rails正在寻找一些视图来呈现。在本例中,它查找与action方法(action_method.js.erb)同名的js视图。
因此,您想要发送到ajax回调块的任何控制器数据都可以简单地放在这个js视图中。因此,在我的示例中,Javascript: foo.js.erb in /view/some/foo.js.erb改为:
<%=@result %>
在所有这些之后,控件返回到客户端javascript,在我们的示例中,它是ajax成功回调方法,您可以在响应中使用您在*.js.erb
文件中放置的内容。
发布于 2018-03-05 07:06:16
与其他视图一样,foo.js.erb
是一个ERB视图。所以你和往常一样引用你的控制器数据。
console.log("<%= @result %>");
(您不需要在ajax:complete
中设置.js.erb,顺便说一下)
https://stackoverflow.com/questions/49105003
复制相似问题