web-dev-qa-db-ja.com

jQuery AJAX-予期しないトークン+パーサーエラー

今日、jQueryとAJAX=を使用してスクリプトを作成しましたが、エラーが発生します...

スクリプト:

function changeAdmin(id) {
$(document).ready(function() {
    $('#ta-modarea-'+id).fadeOut('fast');
    $('#ta-m-loading-'+id).fadeIn('fast');

    $.ajax({
        type: 'POST',
        url: 'ajax_utf.php?a=changeteamadmin',
        dataType: 'json',
        data: {
            admin : $('#admin-id-'+id).val()
        },
        success: function(data) {
            $('#ta-m-loading-'+id).fadeOut('fast');
            $('#ta-modarea-'+id).text(data.msg).fadeIn('fast');
        },
        error: function(jqXHR, textStatus, errorThrown) {
            $('#ta-m-loading-'+id).fadeOut('fast');
            $('#ta-modarea-'+id).text('HTTP Error: '+errorThrown+' | Error Message: '+textStatus).fadeIn('fast');
        }
    });

    return false;
});
}

実行後、次のエラーメッセージが表示されます:HTTP Error: SyntaxError: Unexpected token < | Error Message: parsererror

手伝ってくれませんか?

15
Skylineman

次のようにPHPを介してapplication/jsonヘッダーを送信する必要があります。

header('Content-type: application/json');

これは、jQueryがAcceptヘッダー(application/json, text/javascript)を送信するためです。これが、parseerrorによってトリガーされるjqXHRの原因です。

7
Wrong

試す

 alert( jqXHR.responseText);

あなたのエラー関数で

3
Alon Eitan

ヘッダーのコンテンツタイプを設定してもエラーが発生する場合。サーバーがサーバー側のコードからのエラーで応答していると思います。通常、デバッグメッセージが与えられると、JSONではなく純粋なHTMLに含まれるため、予期しないトークンになります。

これをデバッグする最も簡単な方法は、JSON形式のデータだけでなく、サーバーからの出力を確認できるように、JSONではなくHTMLのDataTypeを設定することです。

サーバー側のコードによって生成されているエラーを確認して修正したら、DataTypeをJSONに戻すことができます。

2
Andrew Killen

以下のコードを試してください。「予期しないトークン<」のようなエラーが表示された場合は、phpファイルを確認する必要があります-「ajax_utf.php」とブラウザで返されるものを確認する(Chrome)表示->開発者->開発者ツール、ネットワークタブ-> XHR。

enter image description here

         $.ajax({
                type: 'post',
                url: postLink,
                dataType: 'json',
                data: postData,

            beforeSend: function (x) {
                if (x && x.overrideMimeType) {
                    x.overrideMimeType('application/json;charset=UTF-8' );
                }
            },
            success: function (result) {
                //console.log(result);
            },
            error: function (xhr, ajaxOptions, thrownError) {
                console.log(arguments);
            }
        });
1
rrr_2010

contentType: "application/json; charset = utf-8"、

1
Sudhir

PHP連想/数値配列とJavaScriptオブジェクトの不一致の問題である可能性があります。

これを試して:

$data = new Array();
$data['test'][] = "Row 1";
$data['test'][] = "Row 2";
echo json_encode($json, JSON_FORCE_OBJECT);

これにより、jsonエンコーダーは数値配列ではなく常にオブジェクトにエンコードされ、問題が解決する可能性があります。

0
Digitum