3

サーバーで403検証エラーをシミュレートすることになっているjQueryajaxTransportハンドラー(私が持っているいくつかのテストケース用)を作成しました。

問題は、これを実行して403エラーを返すと、データが返されないことです。jsonとしても、responseTextとしても返されません。

これが私のコードです(簡略化):( jsfiddle http://jsfiddle.net/znTCL/1/にもあります)

$.ajaxTransport('json',function( options, originalOptions, jqXHR ) {
    return {
      send: function( headers, completeCallback ) {
        completeCallback(403, 'Forbidden', {json : {'Title': 'Title is required.'}});
      }
    };
});

$(function() {

    $.ajax({
        url :document.location,
        type : 'POST',
        data : {Title:''},
        dataType : 'json'                   
    }).fail(function(){ 
        console.log(arguments);
    });
});

サーバーで実際に403を返し、ajaxtransportsを使用しない場合、すべてが期待どおりに機能します。失敗したコールバックには、JSONとして解析してそれに基づいて検証エラーを表示できるresponseTextも含むjqXHRオブジェクトが含まれます。 。ajaxtransportsでは、jqXHRオブジェクトにreponseTextプロパティがありません。

トランスポートで200を返すと、データは適切に送信され、responseTextは適切に送信されます。

私は何か間違ったことをしていますか、それともこれはjQuery ajaxTransportsの制限ですか? </ p>

4

2 に答える 2

2

エラーを返したときに、jsonをcompleteCallbackに戻すことはできないようです。あなたのリクエストはjsonリクエストでしたが。

テキストを返すことは機能します:

completeCallback(403, 'Forbidden', {text : 'Title is required.'});

または

completeCallback(403, 'Forbidden', {text : JSON.stringify({'Title': 'Title is required.'})});

これで、失敗コールバックのjqXHRオブジェクトのresponseTextは未定義ではなく、指定したテキストが含まれているため、解析できます。

于 2012-05-23T12:14:47.363 に答える
0

使ってみてください statusCode:

$.ajax({
  statusCode: {
    404: function() {
      alert("page not found");
    }
  }
});

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

于 2012-05-23T10:27:25.897 に答える