在呈现ajax响应后执行Javascript
我想在呈现ajax响应后执行一段javascript。javascript函数在ajax请求期间动态生成,并且在ajax响应中。”完成“成功”和“成功”事件以不执行作业。我在Firebug控制台中检查了ajax请求,在执行完整的回调时,还没有呈现响应在呈现ajax响应后执行Javascript,javascript,jquery,Javascript,Jquery,我想在呈现ajax响应后执行一段javascript。javascript函数在ajax请求期间动态生成,并且在ajax响应中。”完成“成功”和“成功”事件以不执行作业。我在Firebug控制台中检查了ajax请求,在执行完整的回调时,还没有呈现响应 Does not work: function reloadForm() { jQuery.ajax({ url: "<generate_form_url>", ty
Does not work:
function reloadForm() {
jQuery.ajax({
url: "<generate_form_url>",
type: "GET",
complete: custom_function_with_js_in_response()
});
};
没有代码就帮不了什么忙。作为来自
在ajaxComplete中,您可以决定筛选要为其编写代码的URL。尝试在ajax选项中指定函数名,而不使用
()
:
function reloadForm() {
jQuery.ajax({
url: "<generate_form_url>",
type: "GET",
complete: custom_function_with_js_in_response
});
};
函数重载形式(){
jQuery.ajax({
url:“”,
键入:“获取”,
完成:自定义_函数_,在_响应中包含_js_
});
};
检查(并在需要时推迟调用)和执行回调函数的存在可能会起作用:
// undefine the function before the AJAX call
// replace myFunc with the name of the function to be executed on complete()
myFunc = null;
$.ajax({
...
complete: function() {
runCompleteCallback(myFunc);
},
...
});
function runCompleteCallback(_func) {
if(typeof _func == 'function') {
return _func();
}
setTimeout(function() {
runCompleteCallback(_func);
}, 100);
}
您还可以使用$.ajax(..).done(dou_things_here())
$(文档).ready(函数(){
$('#obj')。单击(函数(){
$.ajax({
网址:“
}).done(函数(){
在这里做点什么;
});
});
}))
还是有别的办法
$(document).ready(function() {
$('#obj').click(function() {
$.ajax({
url: "<url>",
success: function(data){
do_something_with(data);
}
})
});
$(文档).ready(函数(){
$('#obj')。单击(函数(){
$.ajax({
url:“”,
成功:功能(数据){
用(数据)做某事;
}
})
});
}))
请使用此引擎分享您的问题并尝试解决方案。它非常有效
(PS:这包含一个要尝试的示例)
希望对您有所帮助为什么不使用ajaxComplete?它可以为每个ajax调用执行,但使用其中的条件可以修复“正常”请求中可能出现的错误。或者,您可以为这样的ajax调用使用一个包装器,它定义了ajaxComplete方法,并在调用后将其自身移除……请将代码放入其中。理想情况下,如果您将代码放在ajax的成功/错误方法中,它应该可以工作。然而,如果代码存在,我们可以找出您是否犯了任何错误。您使用什么JS框架?你能把代码样本放进去吗?@salketter…没有得到你评论的第二部分。你能详细说明一下吗。添加了代码,我使用jquery。我不喜欢添加基于ajax请求路径的if条件,因为路由可能会改变,代码会在没有人注意到的情况下失败。此外,我还通过GET、POST和PUT请求请求相同的url。有没有其他的方法呢?太棒了!这很有效。请您解释一下推迟调用的runCompleteCallback函数。它会在100ms后继续重试多次,直到函数执行为止,还是只重试一次?
runCompleteCallback
函数检查传入函数是否存在(这意味着AJAX响应已经进入DOM),如果存在,则执行它。如果没有,它将在100毫秒后重试(根据需要更改此持续时间)。在大多数情况下,它会在第二次运行max时传递(除非数据插入到DOM中需要很长时间,这是不可能的)。但是我在DOM中已经有了这个函数,在初始加载时,通过ajax调用重新加载它(js函数是动态生成的)。因此,它将始终在那里找到函数。如果ajax调用没有在超时时间内完成,或者我的理解不正确,它会执行旧版本的函数吗。。在这种情况下,您需要一些机制来确保执行正确(最新)版本的函数。您可以在AJAX调用之前立即将函数重新定义为null(myFunc=null;
),以便runCompleteCallback
认为它不存在,并等待新版本被推送到DOM中。谢谢,我需要完成回调。我改用了$.ajax().always()。
// undefine the function before the AJAX call
// replace myFunc with the name of the function to be executed on complete()
myFunc = null;
$.ajax({
...
complete: function() {
runCompleteCallback(myFunc);
},
...
});
function runCompleteCallback(_func) {
if(typeof _func == 'function') {
return _func();
}
setTimeout(function() {
runCompleteCallback(_func);
}, 100);
}
$(document).ready(function() {
$('#obj').click(function() {
$.ajax({
url: "<url>"
}).done(function() {
do_something_here();
});
});
$(document).ready(function() {
$('#obj').click(function() {
$.ajax({
url: "<url>",
success: function(data){
do_something_with(data);
}
})
});