我有一个使用 Rails UJS 触发 ajax 请求的链接。响应实际上替换了包含链接的父元素。ajax:before 事件按预期触发,但 ajax:complete 事件永远不会触发。我认为这只是元素被替换的结果。但只是为了检查,我直接绑定到一个 ajax“完成”回调而不使用 UJS,它工作正常。
所以我的问题是为什么“完成”回调在直接绑定到 ajax 调用时起作用,但在通过 UJS 绑定到“ajax:完成”时不起作用?
我有一个使用 Rails UJS 触发 ajax 请求的链接。响应实际上替换了包含链接的父元素。ajax:before 事件按预期触发,但 ajax:complete 事件永远不会触发。我认为这只是元素被替换的结果。但只是为了检查,我直接绑定到一个 ajax“完成”回调而不使用 UJS,它工作正常。
所以我的问题是为什么“完成”回调在直接绑定到 ajax 调用时起作用,但在通过 UJS 绑定到“ajax:完成”时不起作用?
阅读这个 jquery-ujs 问题:
我之前发表评论时并没有考虑(道歉),但现在我想我足够清醒可以帮助你:)。
尽管 JQuery 支持 script() 函数,但您通常不会通过 Ajax 触发 UJS!使用带有 remote:true 的常规 form_tag(这将在您的表单中粘贴一个“数据远程”标签。Ajax 与 JSON 和 UJS 一起使用,您将返回纯 js
请记住,该操作通常会以 app/views/<controller>/<action>.js.erb 的名称呈现到表单(或您当前使用的任何模板技术)
请记住在您的控制器中有 respond_to 块,例如
respond_to do |format|
format.js #note.. not .json
end
还要确保您的请求标头接受 javascript.. 'application/javascript', 'script'