【问题标题】:how to exit a function in jquery when an error happens in jquery.ajax当jquery.ajax中发生错误时如何退出jquery中的函数
【发布时间】:2012-10-26 12:11:25
【问题描述】:

当 jquery ajax 发生错误时,我想退出我的函数。例如:如果我使用一个函数调用 $.ajax,该函数具有 $.ajax 之外的其他指令,并且当我的 $.ajax 调用出现错误时,如果我尝试调用 return 以结束剩余的指令,那些剩余的指令被执行。

所以,我想要的是从错误的 $.ajax 参数中结束整个函数。

$.ajax({
 type: "POST",
 url: "home.aspx/ReturnInfoAge",
 data: "{'dD':'" + $('#dDate_wx').val() + "','dM':'" + $('#dMonth_wx').val() + "','dY':'" +   $('#dYear_wx').val() + "'}",
 contentType: "application/json; charset=utf-8",
  dataType: "json",
   success: function (msg) {
    if (msg.d === true) {
       prt.children('.tipCont').remove();
     } else {
       getTooltips(prt, 'criticalv', 'critical', msg.d);
        showMessagingTiming('warning', msg.d, 'Vérification de la date de naissance', null, 5000);
         return;
          }
    },
     error: function (errorMsg) {
       getTooltips(prt, 'criticalv', 'critical', "Veuillez bien saisir la date de naissance.");
      showMessagingTiming('warning', 'Veuillez vérifier: certains champs n\'ont pas les valeurs qu\'il faut.', 'Vérification des champs', null, 5000);
       return;
     }
 })
//other instructions 

我只是不希望,如果 $.ajax 错误参数中发生错误来执行其他剩余指令

【问题讨论】:

  • 那个 ajax 函数是异步的,所以当你从它返回任何东西时,你的函数的其余部分可能早就完成了。您需要在成功(完成)处理程序中执行其他操作。
  • 你可能想看看@this thread

标签: javascript jquery ajax function


【解决方案1】:

错误和成功回调是异步调用的,因此您的“其他指令”在调用其中一个回调之前开始工作。您应该将“其他指令”写入成功回调。

function containsAjax() {
    $.ajax({
        type: "POST",
        url: "home.aspx/ReturnInfoAge",
        data: "{'dD':'" + $('#dDate_wx').val() + "','dM':'" + $('#dMonth_wx').val() + "','dY':'" +   $('#dYear_wx').val() + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            if (msg.d === true) {
                prt.children('.tipCont').remove();
            } else {
                getTooltips(prt, 'criticalv', 'critical', msg.d);
                showMessagingTiming('warning', msg.d, 'Vérification de la date de naissance', null, 5000);
            }
            //other instructions should be here.
        },
        error: function (errorMsg) {
            getTooltips(prt, 'criticalv', 'critical', "Veuillez bien saisir la date de naissance.");
            showMessagingTiming('warning', 'Veuillez vérifier: certains champs n\'ont pas les valeurs qu\'il faut.', 'Vérification des champs', null, 5000);
        }
    });
}

如果你想从 containsAjax 函数返回一些东西,使用回调:

function containsAjax(onsuccess, onfail) {
    $.ajax({
        type: "POST",
        url: "home.aspx/ReturnInfoAge",
        data: "{'dD':'" + $('#dDate_wx').val() + "','dM':'" + $('#dMonth_wx').val() + "','dY':'" +   $('#dYear_wx').val() + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            if (msg.d === true) {
                prt.children('.tipCont').remove();
            } else {
                getTooltips(prt, 'criticalv', 'critical', msg.d);
                showMessagingTiming('warning', msg.d, 'Vérification de la date de naissance', null, 5000);
            }
            //other instructions should be here.
            onsuccess(msg);
        },
        error: function (errorMsg) {
            getTooltips(prt, 'criticalv', 'critical', "Veuillez bien saisir la date de naissance.");
            showMessagingTiming('warning', 'Veuillez vérifier: certains champs n\'ont pas les valeurs qu\'il faut.', 'Vérification des champs', null, 5000);
            onfail(errorMsg);
        }
    });
}

然后这样称呼它:

containsAjax(function(msg) {
    // success callback, returns 'msg'
}, function(errormsg) {
    // error callback, returns 'errormsg'
});

【讨论】:

    【解决方案2】:

    jquery ajax 方法返回一个 XMLHttpRequest 对象。您可以使用此对象取消或中止请求。

    var xhr = null;
    
    xhr = $.ajax({
        url : 'path/to/file?some-parameter',
        success : function(responseText) {
            // some DOM manipulation
        }
    });
    
    $(document).click(function() { xhr.abort() });
    

    【讨论】:

      【解决方案3】:

      尝试抛出异常

      error: function(){
          //...
          throw new Exception('Ajax error description');
      }
      

      它会停止一切,你也会在调试控制台中看到它

      【讨论】:

        【解决方案4】:

        如果您的函数在某个事件上被调用,那么您可以使用以下语句中止它。您可以在 Ajax 调用的错误块中编写此语句。

        ...
         error: function (errorMsg) {
           event.preventDefault();
           getTooltips(prt, 'criticalv', 'critical', "Veuillez bien saisir la date de naissance.");
           showMessagingTiming('warning', 'Veuillez vérifier: certains champs n\'ont pas les valeurs qu\'il faut.', 'Vérification des champs', null, 5000);
           return;
         }
        ...
        

        【讨论】:

        • AJAX 请求是异步的(因此得名),因此至少在某些情况下,在执行 error 函数时,事件已经完成处理。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-20
        • 1970-01-01
        • 2016-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多