在呈现ajax响应后执行Javascript

时间:2012-09-24 09:51:49

标签: javascript jquery

我想在渲染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();
});

4 个答案:

答案 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
        });
      };