web-dev-qa-db-fra.com

jQuery AJAX - Jeton inattendu + erreur d'analyse syntaxique

J'ai écrit un script en utilisant jQuery et AJAX aujourd'hui, et j'ai quelques erreurs ...

Le scénario:

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

Après l'exécution, je reçois le message d'erreur suivant: HTTP Error: SyntaxError: Unexpected token < | Error Message: parsererror

Pourriez-vous m'aider, que dois-je faire?

15
Skylineman

Vous devez envoyer un en-tête application/json via PHP, comme ceci:

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

En effet, jQuery envoie un en-tête Accept (application/json, text/javascript), ce qui est à l'origine de parseerror déclenché par jqXHR.

7
Wrong

Essayer 

 alert( jqXHR.responseText);

dans votre fonction d'erreur

3
Alon Eitan

Si vous avez essayé de définir le type de contenu de l'en-tête et obtenez toujours l'erreur. Je m'attends à ce que le serveur réponde avec une erreur de votre code côté serveur. Habituellement, lorsqu'un message de débogage est donné, il s'agit en HTML pur et non en JSON, donc du jeton inattendu.

Le moyen le plus rapide de déboguer cela consiste à définir le type de données du type HTML au lieu de JSON afin que vous puissiez voir la sortie du serveur, pas seulement les données au format JSON. 

Une fois que vous avez vu et corrigé l'erreur générée par votre code côté serveur, vous pouvez redevenir un DataType de JSON. 

2
Andrew Killen

Essayez le code ci-dessous, mais si vous recevez une erreur du type "Jeton inattendu <", vous devez vérifier votre fichier php - "ajax_utf.php" et vérifier ce qui est renvoyé dans le navigateur (Chrome) Affichage-> Développeur-> Outils de développement, Réseau onglet -> 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

Il pourrait s'agir d'un problème de correspondance inexacte PHP de tableaux associatifs/numériques et d'objets Javascript.

Essaye ça:

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

Cela devrait obliger l'encodeur JSON à toujours encoder des objets plutôt que des tableaux numériques, ce qui pourrait résoudre le problème.

0
Digitum