web-dev-qa-db-ja.com

jQuery JSON応答は常にParseErrorをトリガーします

JQueryとJSONを使用していくつかの基本操作を実行しようとしています。現在、jQueryがplayフレームワークアプリケーションからのJSON応答を受け入れることが困難です。以下は、まだエラーを生成するコードの簡易バージョンです。

$.ajax({
    type: 'POST',
    url: "@{FrontEnd.isUsernameAvailable()}",
    data: "name=thisnameisavailable",
    cache: false,
    success: function(data) {
        console.log("Success... ");
    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.log("Error... " + textStatus + "        " + errorThrown);
    },
    dataType: 'json'
});

エラーコールバックは常にトリガーされます。表示する

エラー... parsererror jQuery15001997238997904205_1298484897373が呼び出されませんでした

Firebugを介して返されたJSONを検査してもエラーは表示されず、さまざまなJSONリントツールも検証されます。 dataTypeを「text」に変更すると、成功が呼び出されます。しかし、jQuery検証プラグインの一部としてisUsernameAvailable呼び出しを使用しようとしているので、有効なJSONを返すために必要です。

34
Chesrae

誤解しているかもしれませんが、dataTypetextに設定し、JSON.parse()で返されたデータを設定できませんでしたか?

success: function(data) {
    data = JSON.parse(data);
    // process data
},

一般的に合意されたソリューションを追加するために編集されました(以前はコメントのみ):

api.jquery.com/jQuery.ajax を調べたところ、jQuery 1.5では、種類の型変換を実行できるように見えました。 「スペースで区切られた複数の値:jQuery 1.5では、jQueryはContent-Typeヘッダーで受信したものからdataTypeを必要なものに変換できます。たとえば、テキスト応答をXMLとして処理する場合は、「 dataTypeにはテキストxml」。たぶん、「テキストjson」を試すことができます。

34
ggutenberg

JQuery 1.5にアップグレードするとすぐに同じエラーが発生しました。私の問題は、jQuery 1.5と互換性のないjquery検証プラグインも使用しているためであることがわかりました。 jquery検証プラグインを削除すると、dataType jsonを使用した$ .ajax()が正常に機能します。

Jquery検証プラグインの非互換性の詳細については、こちらをご覧ください。 http://bugs.jquery.com/ticket/8118

12
Johnny Oshika

また、「parsererror jQueryNNNN_NNNが呼び出されませんでした」(jsonpとjQuery 1.7.2を使用)を得ました。理由は、返されたjson構造の値の1つに改行が含まれていたためです。これが誰かを助けることを願っています。

3
Robert

parseerrorには_callback=?_部分が含まれていたので、urlを取得しました。 これはJSONP機能を有効にするマジックストリングです

サーバー側のREST APIがJSONPからJSONに変更されたため、そこから返されるデータ形式は、jQuery.getJSON(..) with _callback=?_。この状況では、jQuery.getJSON(..)successコールバックを呼び出しませんが、代わりにfailコールバックを呼び出します。

urlパラメーターから_callback=?_部分を削除することで、この問題を解決しました。

2
Abdull