3

当我在 JavaScript(使用 JQuery)中发送 Ajax 请求时,它有时会引发我无法捕获的内部服务器错误。错误显示在浏览器中。我什至尝试将 ajax 调用包装在 try-catch 块中。如何处理 Ajax 错误?

编辑 这里是我的代码:

$.post('/multi/getGameStatus', function(data) {
    if(data && data.game) {
        settings.game = data.game;
        setStartRacePopupUI.call(this, data);
        // remove all racers
        removePlayers.call();
        for(var i=0;i<settings.game.players.length;i++) {
            var player = settings.game.players[i];
            var isme = (player.id == settings.playerId);
            addPlayer.call(this, player, isme, i);
        }

        if (settings.game.gameStatus == "OPEN") {
            setTimeout(refreshPlayers, refreshPlayersInterval, nextStatus);
        } else if(settings.game.gameStatus == "IN_GAME") {
            counterToGameStart = data.sts;
            gameFllow(nextStatus);
        }
    }
});

即使我使用错误处理程序,我仍然会在页面上收到 JS 错误

4

2 回答 2

4

http://api.jquery.com/jQuery.ajax/

...为了方便和与 $.ajax() 使用的回调名称保持一致,jqXHR 还提供了 .error()、.success() 和 .complete() 方法。

jqXHR.success()、jqXHR.error() 和 jqXHR.complete() 回调将在 jQuery 1.8 中被弃用。要为最终删除准备代码,请改用 jqXHR.done()、jqXHR.fail() 和 jqXHR.always()。

// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.ajax( "example.php" )
    .done(function() { alert("success"); })
    .fail(function() { alert("error"); })
于 2012-09-20T13:33:22.783 回答
4
$.ajax({
  url:"myurl",
  data: {json:"data"},
  success: function(){//on success},
  error: function(){//called on error}
});

根据ajax api docs的错误回调:(如有疑问,请参阅 api docs)

错误(jqXHR,textStatus,errorThrown)函数

请求失败时调用的函数。该函数接收三个参数:jqXHR(在 jQuery 1.4.x 中,XMLHttpRequest)对象,一个描述发生的错误类型的字符串和一个可选的异常对象(如果发生)。第二个参数(除了 null)的可能值是“timeout”、“error”、“abort”和“parsererror”。发生 HTTP 错误时,errorThrown 会接收 HTTP 状态的文本部分,例如“未找到”或“内部服务器错误”。从 jQuery 1.5 开始,错误设置可以接受一个函数数组。每个函数都会被依次调用。注意:跨域脚本和 JSONP 请求不调用此处理程序。这是一个 Ajax 事件。

于 2012-09-20T13:38:29.567 回答