【问题标题】:When ajax success - ajaxComplete is not fired当 ajax 成功时 - ajaxComplete 不会被触发
【发布时间】:2016-06-19 18:04:36
【问题描述】:

当 ajax 查询成功时 - ajaxcomplete(包装在回调函数中 - 点击事件)不会被触发。

另一方面,当它不成功(.error)时,ajaxComplete 工作得很好。

为了让它变得更加复杂 - 这里有一个关于这个问题的更详细的真相:

1) 这适用于 Firefox 和 IE。谈到 Chrome - AjaxComplete 实际上是在 ajax 成功时触发的,但它在函数内执行代码时动作缓慢。

非常感谢帮助

ajax 函数

 function fetch_customer_data_from_db(zipcode_string, email_string, query_done, query_fail) {

    var theUrl = "http://mysecretwebpage/json_create.asp";
    $.ajax({
        url: theUrl,
        dataType: "json",

        success: function (response) {

            fadeout_email_field();

            query_done = 1;

            $('#cust_date_of_birth').css('display', 'none');
            $('#customer_data_field_text').css('display', 'block');
            $('#validation_message_email').css('visibility', 'hidden');

            var customer_data = response.customerdata;
            customer_data.forEach(function (custdata) {

                document.getElementById("cfname").textContent = custdata.fname; 
                document.getElementById("clname").textContent = custdata.lname; 
                document.getElementById("cadress").textContent = custdata.street; 
                document.getElementById("czipc").textContent = custdata.zipcode; 
                document.getElementById("clocation").textContent = custdata.location; 
                document.getElementById("cemail").textContent = custdata.email; 
                document.getElementById("cmobile").textContent = custdata.mobile; 
            });
        },

        error: function() {

            if (!query_fail) {


                $('#cust_date_of_birth').css('display', 'block');

                $('#validation_message_email').css('visibility', 'hidden');
                query_fail = 1;
                fadeout_email_field();
            }
        }
    });
}

点击功能(回调)

如果 ajax 错误(这里 ajaxcomplete 有效)

$('#checkbox1').change(function() {

    if($(this).is(":checked")) {

        $( document ).ajaxComplete(function() {
           alert("ajax error!!!");
         });
 }

如果 ajax 成功(ajaxComplete 没有被触发)

$('#button_change_cdata').click(function() {

  $( document ).ajaxComplete(function() {   
     alert("ajax success");
  });

});

【问题讨论】:

  • 请阅读您的 javascript 控制台的输出,并将此信息添加到您的问题中
  • 我认为这不是问题...也许是您在 SO 上剪切粘贴的拼写错误...但是您的字符串未在此处关闭var theUrl = "http://mysecretwebpage/json_create.asp 添加";
  • @LouysPatriceBessette - 谢谢,已修复 - 是的,因为“剪切粘贴”
  • 太棒了。然后,我会在成功回调中尝试console.log("Ajax success");...检查您的控制台。
  • 把你的 clickchange 函数放在你的错误和成功回调中(在最后几行)。

标签: javascript jquery ajax


【解决方案1】:

这里的问题是您使用ajaxComplete 以及successerror 回调。为了更准确,您应该使用ajaxSuccessajaxError

ajaxComplete:注册一个处理程序,以便在 Ajax 请求完成时调用。

ajaxSuccess:附加一个在 Ajax 请求成功完成时执行的函数。

ajaxError:注册一个处理程序以在 Ajax 请求完成并出现错误时调用

对于您的 ajaxSuccessajaxError 处理程序,请尝试以下操作:

$( document ).ajaxError(function() {
    $('#checkbox1').on("change",function() {
        if($(this).is(":checked")) {
           alert("ajax error!!!");
        }
    });
});
$( document ).ajaxSuccess(function() {   
    $('#button_change_cdata').on("click",function() {
           alert("ajax success");
    });
});

【讨论】:

  • @Ryan 感谢您的链接,但我没有抓住重点。如果您的意思是使用 ajaxComplete 可以提供 ajax 响应,那么您提供的链接上的最后两个示例大多是相关的。 success,errorcomplete 之间存在差异(如果您愿意,我们可以讨论差异)。这就是我如上回答的原因。
猜你喜欢
  • 2020-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2014-02-26
相关资源
最近更新 更多