Javascript Rails 4:DOM已经准备好,AJAX响应会导致重复
问题 有没有一种好的技术可以避免在AJAX响应中调用相同的代码javascript(jquery) 示例 假设我有这些视图和js文件 index.html.erbJavascript Rails 4:DOM已经准备好,AJAX响应会导致重复,javascript,jquery,html,ruby-on-rails,ajax,Javascript,Jquery,Html,Ruby On Rails,Ajax,问题 有没有一种好的技术可以避免在AJAX响应中调用相同的代码javascript(jquery) 示例 假设我有这些视图和js文件 index.html.erb <div class="listing_users"> <%= render @users %> </div> 当我通过AJAX创建一个新用户时,我让rails在我的create.js.erb响应中呈现它 $(".listing_users").append("<%= j(render(
<div class="listing_users">
<%= render @users %>
</div>
当我通过AJAX创建一个新用户时,我让rails在我的create.js.erb
响应中呈现它
$(".listing_users").append("<%= j(render(:partial => @users)) %>")
$(".listing_users").css({"background-color": "red"})
只要在DOM就绪时调用它,并在AJAX响应中调用它即可。但是,这也会调用代码两次。您可以在ready处理程序和ajax回调之间共享一个
这个对象的done
方法将包含您的代码,而您可以从ajax回调和ready处理程序中调用它的resolve方法
即使多次请求,也只能执行一次解析
代码示例:
// jquery must have been included here
var g_cbguard = new Deferred();
g_cbguard
.done(function () {
// your code that shall be executed only once
})
;
// ...
// ready handler
$(document).ready(function () {
// ...
g_cbguard.resolve();
// ...
});
// ...
// somewhere else in your ajax call
$.ajax(
//...)
).done( function () {
g_cbguard.resolve();
});
// ...
回答得很好。我不知道
jquery'deferred'对象
。它不像我在rails中使用AJAX那样工作,但我正在研究如何在rails中使用它
$(".listing_users").append("<%= j(render(:partial => @users)) %>")
$(".listing_users").css({"background-color": "red"})
function set_red(){
$(".user").css({"background-color": "red"})
}
// jquery must have been included here
var g_cbguard = new Deferred();
g_cbguard
.done(function () {
// your code that shall be executed only once
})
;
// ...
// ready handler
$(document).ready(function () {
// ...
g_cbguard.resolve();
// ...
});
// ...
// somewhere else in your ajax call
$.ajax(
//...)
).done( function () {
g_cbguard.resolve();
});
// ...