204

getJSON呼び出しのエラーをどのように処理できますか?jsonpを使用してクロスドメインスクリプトサービスを参照しようとしていますが、エラーメソッドをどのように登録しますか?

4

9 に答える 9

288

$.getJSON()は、通常のAJAX呼び出しの一種の抽象化であり、JSONでエンコードされた応答が必要であることを通知する必要があります。

$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

エラーは2つの方法で処理できます。一般的に(実際に呼び出す前にAJAX呼び出しを構成することにより)、または具体的に(メソッドチェーンを使用して)。

'generic'は次のようになります。

$.ajaxSetup({
      "error":function() { alert("error");  }
});

そして「特定の」方法:

$.getJSON("example.json", function() {
  alert("success");
})
.done(function() { alert("second success"); })
.fail(function() { alert("error"); })
.always(function() { alert("complete"); });
于 2011-04-05T14:29:51.453 に答える
89

誰かがルチアーノにこれらのポイントを与えます:)私は彼の答えをテストしました-同様の質問がありました-そして完璧に機能しました...

50 セントも追加します。

.error(function(jqXHR, textStatus, errorThrown) {
        console.log("error " + textStatus);
        console.log("incoming Text " + jqXHR.responseText);
    })
于 2011-09-14T17:59:08.663 に答える
79

これが私の追加です。

http://www.learnjavascript.co.uk/jq/reference/ajax/getjson.htmlおよび公式ソースから

" jQuery 1.5 で導入された jqXHR.success()、jqXHR.error()、および jqXHR.complete() コールバック メソッドは、jQuery 1.8 で非推奨になりました。これらの最終的な削除に備えてコードを準備するには、jqXHR.done()、jqXHR を使用します.fail()、および jqXHR.always() 代わりに。 "

私はそれを行いました。ここにルチアーノの更新されたコードスニペットがあります:

$.getJSON("example.json", function() {
  alert("success");
})
.done(function() { alert('getJSON request succeeded!'); })
.fail(function() { alert('getJSON request failed! '); })
.always(function() { alert('getJSON request ended!'); });

エラーの説明と、すべての json データを文字列として表示します。

$.getJSON("example.json", function(data) {
  alert(JSON.stringify(data));
})
.done(function() { alert('getJSON request succeeded!'); })
.fail(function(jqXHR, textStatus, errorThrown) { alert('getJSON request failed! ' + textStatus); })
.always(function() { alert('getJSON request ended!'); });

アラートが気に入らない場合は、代わりにconsole.log

$.getJSON("example.json", function(data) {
  console.log(JSON.stringify(data));
})
.done(function() { console.log('getJSON request succeeded!'); })
.fail(function(jqXHR, textStatus, errorThrown) { console.log('getJSON request failed! ' + textStatus); })
.always(function() { console.log('getJSON request ended!'); });
于 2013-09-29T07:40:47.533 に答える
4

$.getJSON("example.json", function() {
  alert("success");
})
.success(function() { alert("second success"); })
.error(function() { alert("error"); })

jQuery 2.x で修正されました。jQuery 1.x では、エラー コールバックを受け取ることはありません

于 2016-01-24T22:29:29.163 に答える
2

なぜだめですか

getJSON('get.php',{cmd:"1", typeID:$('#typesSelect')},function(data) {
    // ...
});

function getJSON(url,params,callback) {
    return $.getJSON(url,params,callback)
        .fail(function(jqXMLHttpRequest,textStatus,errorThrown) {
            console.dir(jqXMLHttpRequest);
            alert('Ajax data request failed: "'+textStatus+':'+errorThrown+'" - see javascript console for details.');
        })
}

??

使用.fail()するメソッド (jQuery 1.5+)の詳細については、 http: //api.jquery.com/jQuery.ajax/#jqXHR を参照してください。

jqXHRは関数によって返されるため、チェーンのような

$.when(getJSON(...)).then(function() { ... });

可能です。

于 2015-10-14T19:09:31.160 に答える
1

私はこれと同じ問題に直面しましたが、失敗したリクエストのコールバックを作成するのではなく、単純に json データ オブジェクトでエラーを返しました。

可能であれば、これが最も簡単な解決策のようです。以下は、私が使用した Python コードのサンプルです。(Flask、Flask の jsonify f および SQLAlchemy を使用)

try:
    snip = Snip.query.filter_by(user_id=current_user.get_id(), id=snip_id).first()
    db.session.delete(snip)
    db.session.commit()
    return jsonify(success=True)
except Exception, e:
    logging.debug(e)
    return jsonify(error="Sorry, we couldn't delete that clip.")

次に、次のように Javascript を確認できます。

$.getJSON('/ajax/deleteSnip/' + data_id,
    function(data){
    console.log(data);
    if (data.success === true) {
       console.log("successfully deleted snip");
       $('.snippet[data-id="' + data_id + '"]').slideUp();
    }
    else {
       //only shows if the data object was returned
    }
});
于 2012-12-21T17:14:44.173 に答える
0

場合によっては、この方法で同期の問題が発生することがあります。関数内にコールバック呼び出しを書きましたが、setTimeout同期的にうまく機能しました =)

例えば:

function obterJson(callback) {


    jqxhr = $.getJSON(window.location.href + "js/data.json", function(data) {

    setTimeout(function(){
        callback(data);
    },0);
}
于 2015-07-07T14:02:03.113 に答える