Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在呈现ajax响应后执行Javascript_Javascript_Jquery - Fatal编程技术网

在呈现ajax响应后执行Javascript

在呈现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

我想在呈现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中,您可以决定筛选要为其编写代码的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);
        }
    })
});