2017-01-16 2 views
1

jQueryの$ .ajaxを使用して特定の応答エラーをキャッチしようとしています。jQuery AJAXのステータスコードエラーをキャッチ

500または404エラーコードではなく、ステータスコード機能を実行するので、あった場合、それは誤差関数を実行し、私が代わりにここで

が起こることになっているものの警告ボックスを取得するには、私のコードが見えるものですlike

// get page data 
getPageData: function(url, callback) { 

    url = ajaxLoader.getURL(url); 

    $.ajax({ 
     url: url, 
     type: 'get', 
     data: {_ajax_loader: 1}, 
     error: function(xhr, status) { 
      alert('There was a problem loading that page. You may need to refresh.'); 
     }, 
     statusCode: { 
       404: function(response) { 
        ajaxLoader.fetchPage('/missing'); 
       }, 
       500: function(response) { 
        ajaxLoader.fetchPage('/error'); 
       } 
      }   
    }).done(callback); 
}, 

答えて

5

これは仕様です。 errorは、サーバによってエラーが返されたときに実行されます。さらに、statusCodeに定義された機能もcalledである。 completesuccessハンドラについても同様です。

エラーコードが既にstatusCodeで定義されている場合、エラーハンドラが実行されないように修正することができます。

$.ajax({ 
    url: '/echo', 
    type: 'get', 
    success: function() { 
     console.log('ajax.success'); 
    }, 
    error: function(xhr, status) { 
     // check if xhr.status is defined in $.ajax.statusCode 
     // if true, return false to stop this function 
     if (typeof this.statusCode[xhr.status] != 'undefined') { 
      return false; 
     } 
     // else continue 
     console.log('ajax.error'); 
    }, 
    statusCode: { 
     404: function(response) { 
      console.log('ajax.statusCode: 404'); 
     }, 
     500: function(response) { 
      console.log('ajax.statusCode: 500'); 
     } 
    } 
}); 

Demo

-1

errorの両方を実行しStatusCode機能が適切であろう。それは、誤差関数の引数と一致する必要があるとき

あなたのコードとの唯一の問題は、あなたのStatusCode機能で、あなたは(私は成功関数の引数であると仮定)responseの引数を持っているということです、次のように:

// get page data 
getPageData: function(url, callback) { 

    url = ajaxLoader.getURL(url); 

    $.ajax({ 
     url: url, 
     type: 'get', 
     data: {_ajax_loader: 1}, 
     error: function(xhr, status) { 
      alert('There was a problem loading that page. You may need to refresh.'); 
     }, 
     statusCode: { 
      404: function(xhr, status) { 
       ajaxLoader.fetchPage('/missing'); 
      }, 
      500: function(xhr, status) { 
       ajaxLoader.fetchPage('/error'); 
      } 
     }   
    }).done(callback); 
}, 

これにより、404または500が受信された場合、error機能と404/500機能の両方が実行されます。あなたの代わりにのみ404/500関数が実行持たせたい、と返されたステータスが404または500でない場合error機能のみを実行する場合は、次のように、あなたはこれを行うことができます。

// get page data 
getPageData: function(url, callback) { 

    url = ajaxLoader.getURL(url); 

    $.ajax({ 
     url: url, 
     type: 'get', 
     data: {_ajax_loader: 1}, 
     error: function(jqXHR, status) { 
      switch (jqXHR.status) { 
       case 404: 
        ajaxLoader.fetchPage('/missing'); 
        break; 
       case 500: 
        ajaxLoader.fetchPage('/error'); 
        break; 
       default: 
        alert('There was a problem loading that page. You may need to refresh.'); 
      } 
     }   
    }).done(callback); 
}, 
+0

を 'statusCode'機能ドン」はそれらの議論を使用すると、どのような違いがあるのでしょうか? – Barmar

+0

実際には違いはありません。成功引数ではなく、エラー引数が必要であることを示すための概要を示しています。 – bbailes

+0

あなたは「あなたの問題はここにあります...」と言いました。これは、それが意図したとおりに動作しない理由を意味しています。 – Barmar

関連する問題