我想在渲染ajax响应后执行一段javascript。 javascript函数是在ajax请求期间动态生成的,并且在ajax响应中。 '完成'和'成功'事件不能完成这项工作。我在Firebug控制台中检查了ajax请求,并且在执行完整的回调时没有呈现响应。
Does not work:
function reloadForm() {
jQuery.ajax({
url: "<generate_form_url>",
type: "GET",
complete: custom_function_with_js_in_response()
});
};
ajaxComplete完成这项工作,但它会对页面上的所有ajax调用执行。我想避免这种情况。有可能的解决方案吗?
$('#link_form').ajaxComplete(function() {
custom_function_with_js_in_response();
});
答案 0 :(得分:11)
你也可以使用$ .ajax(..)。done(do_things_here());
$(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);
}
})
});
});
请利用此引擎分享您的问题并尝试解决方案。它非常有效。
http://jsfiddle.net/qTDAv/7/(PS:这包含要尝试的样本)
希望能提供帮助
答案 1 :(得分:1)
检查(并在需要时延迟调用)并执行回调函数的存在可能有效:
// 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);
}
答案 2 :(得分:0)
没有代码就无济于事。作为JQuery ajax complete page
的一般示例$('.log').ajaxComplete(function(e, xhr, settings) {
if (settings.url == 'ajax/test.html') {
$(this).text('Triggered ajaxComplete handler. The result is ' +
xhr.responseHTML);
}
});
在ajaxComplete中,您可以决定过滤要为其编写代码的网址。
答案 3 :(得分:0)
尝试在ajax选项中指定不带()
的函数名称:
function reloadForm() {
jQuery.ajax({
url: "<generate_form_url>",
type: "GET",
complete: custom_function_with_js_in_response
});
};