当前位置: 首页 > 面试题库 >

在Rails中使用UJS时,ajax:success和ajax:complete回调不起作用

曹新觉
2023-03-14
问题内容

我有一个链接,当我单击它时会触发ajax调用,然后用另一个链接替换此链接,例如说原始链接是“添加朋友”,当我单击此链接时,它将向ajax请求发送一个ajax请求给add_friend操作,然后如果添加了朋友,则上面的链接将被另一个链接“取消请求”替换,我为此使用ujs:

$("#link_for_friend").html("<%= escape_javascript(render('users/cancel_link')) %>")

当我尝试添加回调(:success和:complete)时不起作用,我尝试了:beforeSend,如下所示:

$(document).ready ->
  $("#my_link").on "ajax:beforeSend", ->
    alert("hello")

有成功和完整回调的解决方案吗?

注意:我的想法是在ajaxStart触发时显示loader.gif,然后在ajax:complete回调至少触发时隐藏它,如果有一些错误,我想在ajax:error触发时显示它

更新资料

我试图通过将action.js.erb内部的代码移动到js文件来解决此问题,如下所示:

  $(document).ready ->
  $(document).on("ajax:success", "a.invitation-box", ->
    $("#link_for_friend").html("<%= escape_javascript(render('users/cancel_link')) %>")
  ).on "ajax:error", "a.invitation-box", ->
    alert "error"

但是这样无法将render(’users / cancel_link’)放入JS文件中


问题答案:

我有同样的问题,问题不在于ajax:success或ajax:complete回调。问题在于,当显示加载的gif图像时,您将替换容器的内容,包括链接本身。因此,在其上应用成功,完整回调的元素不再是DOM的一部分,这就是为什么不触发该回调的原因。

一种解决方案是隐藏元素并附加加载图像,如下所示:

$('#my_link').on "ajax:send", (event, xhr, settings) ->
        $('#my_link').hide()
        $("#my_link_container").append("<image src = 'img.gif' />")

然后将触发成功和完整的回调。希望它对某人有帮助:)



 类似资料:
  • 问题内容: 我试图在jQuery中使用getJSON函数导入一些数据并触发回调函数。回调函数未运行。但是,如果我使用get函数尝试相同的操作,则效果很好。奇怪的是,即使我将“ json”作为类型传递,它也可以与get函数一起使用。为什么会这样呢?我在Firefox 3和IE 7中测试了以下文件: 只要我访问的URL在同一个域中,这似乎都会发生。我尝试传递一些数据,但这没有什么不同。 当然,可以像在

  • 问题内容: (使用Chrome 44测试) 所需行为 :发出XHR请求,将结果放入文本区域,选择文本,然后复制到剪贴板。 实际行为 :成功执行XHR请求后,将结果放在文本区域中并选择它,但是无法将结果复制到剪贴板。但是,如果我在XHR回调之外启动副本,则可以正常工作。 示例html页面: 如果按“获取数据并复制文本区域”按钮,则数据已成功获取但未复制。如果按“复制文本区域”按钮,则文本将按预期复制

  • 我用的是Spring MVC(4.2.2.RELEASE)和Tomcat 8。我的要求是向浏览器发送一个通知。请找到下面的代码。 控制器-------------------@Controller公共类MessageController{/@Autowired private SimpMessageTemplate模板;@Autowire private SimpMessageSendingOpe

  • 问题内容: 非常感谢你的帮助。我有一个和表。位置 我对位置模型执行以下查询。 然后,我要对其执行附加查询并根据以下内容对其进行过滤 该查询并 没有 工作。它返回一个空对象。 这是参数: location_params 1} permitted: true> ads_params 1} permitted: true> 不允许这样输入特定的列: 我有postgresql,我没有考虑过使用SQL,但是

  • 我是LiquiBase的新手。我可以使用LiquiBase更新(具有创建表的变更集)到Oracle数据库。在进行更新时,我还创建了标记。但是当我尝试回滚更新的更改(即删除创建的表)时,使用该标记。桌子没有掉下来。 我使用的是liquibase-maven插件3.4.2。下面是Maven中的代码。 请帮我解决这些问题。

  • 我有一个新的SpringBoot应用程序来公开一些与jar中的实体相关的服务(作为一个依赖项包含在POM中)。对于数据访问,我计划使用SpringData,这样我就可以使用伟大的JpaRepository,而不是手动编写DAO。 jar在代码中是可见的,所以编译一切都很好,但是当Spring开始连接bean时,它会抛出异常: 在JAR中声明@Entity并使用SpringData/jpaEntit