Rails ajax get调用错误的操作,直到页面刷新之后



如图所示,'import'是控制器中的动作。这将加载_list.html中的数据网格。然后将_list重新插入到_index.html.erb中。排序按钮(ajax)位于网格的顶部行,也在_index中重新插入_list。排序按钮工作良好,但只有在页面刷新后。当加载后立即使用时,按钮调用'id=import'的'show'动作。移动按钮$get调用到_list.html。Erb没用。

我遇到了一些鲜为人知的jQuery/Ajax技巧,更显式地将方法/操作分配给调用。这不是一个确定的解决方案,但值得一试,如果我能再次找到它)任何想法…吗?

_index.html.erb…

<%= form_tag import_mtab1lets_path, :method => 'post', :id => "import_mtab1lets" do %>

提交被捕获并使用ajax…

$.post("/mtab1lets/import", $("#import_mtab1lets").serialize(), null, 'script');
return false;

排序按钮动作…

$(document).ready(function () {
  $("#tablets th a, #tablets .pagination a").on("click", function() {
  $.get("/mtab1lets/list", null, null, "script");
  return false;
  });
});

在路由中,我是这样安排的…

match "/mtab1lets/show/:id" => "mtab1lets#show", via: 'get'
match "/mtab1lets/list" => "mtab1lets#list", via: 'get'  
resources :mtab1lets do
  collection { post :import }
end
match "/mtab1lets/:id" => "mtab1lets#update", via: 'post'
resources :mtab1lets

我可以自己回答。_index是_list的父页面。排序按钮的绑定在_index,而不是_list中。因此,当_list被ajax重新加载时,_index中的bind不会被调用。我扩展了ajax调用,在.done中重复绑定。这个小难题在各地都得到了同样的回答。

$.post( "/mtab1lets/import", $("#import_mtab1lets").serialize(), null, 'script', function() {
})
.done(function() {
    $("#tablets th a, #tablets .pagination a").on("click", function() {
        $.get("/mtab1lets/list", null, null, "script");
        return false;
    });
})
.fail(function() {
    alert( "ajax load error" );
});

最新更新