wake-up-neo.net

jQuery AJAX - Unerwarteter Token + Parsererror

Ich habe heute mit jQuery und AJAX ein Skript geschrieben und erhalte einige Fehler ...

Das Skript:

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;
});
}

Nach dem Lauf erhalte ich folgende Fehlermeldung: HTTP Error: SyntaxError: Unexpected token < | Error Message: parsererror

Könnten Sie mir helfen, was soll ich tun?

15
Skylineman

Sie müssen einen application/json-Header über PHP senden, wie folgt:

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

Das liegt daran, dass jQuery einen Accept-Header (application/json, text/javascript) sendet, und dies ist die Ursache für parseerror, die von jqXHR ausgelöst wird.

7
Wrong

Versuchen 

 alert( jqXHR.responseText);

in deiner Fehlerfunktion

3
Alon Eitan

Wenn Sie versucht haben, den Inhaltstyp des Headers festzulegen, wird der Fehler immer noch angezeigt. Ich erwarte, dass der Server mit einem Fehler in Ihrem serverseitigen Code antwortet. Wenn eine Debug-Nachricht ausgegeben wird, handelt es sich in der Regel nicht um JSON, sondern um ein unerwartetes Token.

Der schnellste Weg zum Debuggen ist das Festlegen des Datentyps des HTML-Codes anstelle von JSON, sodass Sie die Ausgabe des Servers sehen können, nicht nur JSON-formatierte Daten. 

Wenn Sie den durch Ihren serverseitigen Code hervorgerufenen Fehler erkannt und behoben haben, können Sie wieder zu einem Datentyp von JSON werden. 

2
Andrew Killen

Versuchen Sie den Code unten, aber wenn Sie eine Fehlermeldung wie "Unerwartetes Token <" erhalten, müssen Sie Ihre PHP-Datei "ajax_utf.php" überprüfen und überprüfen, was im Browser zurückgegeben wird (Chrome). Ansicht-> Entwickler-> Entwickler-Tools, Netzwerk tab -> 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

Es könnte ein Problem mit missmatchenden PHP assoziativen/numerischen Arrays und Javascript-Objekten sein.

Versuche dies:

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

Dies sollte den json-Encoder zwingen, immer in Objekte anstelle von numerischen Arrays zu codieren, wodurch das Problem möglicherweise gelöst wird.

0
Digitum