39

ajax jsonp リクエストを作成していますが、失敗エラー処理が機能しません。リクエストが 404 または 500 の場合、エラーは処理されません。

私はこれに対する答えを見つけるために周りを見回してきましたが、何も見つかりません。http://code.google.com/p/jquery-jsonp/で解決策があるようですが、使用方法の例が見つかりません。

function authenticate(user, pass) {       
    $.ajax ({
        type: "POST",
        url: "url",
        dataType: 'jsonp',
        async: false,
        //json object to sent to the authentication url
        data: {"u": userid, "p": pass},

        success: function (data) {
            //successful authentication here
            console.log(data);
        },
        error: function(XHR, textStatus, errorThrown) {
            alert("error: " + textStatus);
            alert("error: " + errorThrown);
        }
    })
}
4

5 に答える 5

39

エラーを処理する2つの方法、

  1. クロスドメイン JSONP リクエストのエラー処理はありません。エラー処理のサポートを提供するGithub https://github.com/jaubourg/jquery-jsonpで利用可能な jsonp プラグインを使用し ます。

  2. jQuery ajax Timeout - サイレントに失敗した可能性があるため、エラー コールバックを起動するのに妥当な時間の経過後にタイムアウトします。実際のエラー (またはエラー ステータス) が何であるかはわからないかもしれませんが、少なくともエラーを処理することはできます。

于 2013-10-06T10:34:20.690 に答える
11

私は ajax jsonp DataType リクエストのエラーを処理しようとしてしばらくの間、あなたのように苦労してきましたが、コードを共有したいと思います。基本的なことは、ajax リクエストにタイムアウトを含めることです。そうしないと、エラーが発生することはありません: 関数

$.ajax({
url: "google.com/api/doesnotexists",
dataType: "jsonp",
timeout: 5000,

success: function (parsed_json) {
console.log(parsed_json);
},

error: function (parsedjson, textStatus, errorThrown) {
console.log("parsedJson: " + JSON.stringify(parsedjson));

$('body').append(
    "parsedJson status: " + parsedjson.status + '</br>' + 
    "errorStatus: " + textStatus + '</br>' + 
    "errorThrown: " + errorThrown);        

 }
});

jsfiddle - jquery ajax 呼び出しと JSONP dataType でエラーを処理する - エラー 404

于 2013-10-04T16:06:20.560 に答える
0

古い質問ですが、同じ問題がありました。ここに私のために働いた解決策があります。

リクエストを送信するドメインを所有している場合は、レスポンスに変数を設定して、クライアント側で確認できます。

サーバ側:

SERVER_RESPONSE=true; Callback(parameter1, parameter2);

クライアント側:

if(typeof SERVER_RESPONSE === 'undefined'){
  console.log('No Response, maybe server is down');
}
else{
  console.log('Got a server response');
}
于 2014-05-06T15:12:34.037 に答える