web-dev-qa-db-fra.com

La réponse jQuery JSON déclenche toujours une erreur ParseError

J'essaie de préformer certaines opérations de base avec jQuery et JSON. Ayant actuellement des difficultés avec jQuery acceptant la réponse JSON de mon application de framework de jeu. Voici une version simplifiée du code qui produit toujours l'erreur.

$.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'
});

Le rappel d'erreur est toujours déclenché. Il affiche

Erreur ... l'analyseur syntaxique jQuery15001997238997904205_1298484897373 n'a pas été appelé

L'inspection du JSON retourné via Firebug ne montre aucune erreur et divers outils de peluches JSON valident également. Changer dataType en "text" fait appeler le succès. Mais j'essaie d'utiliser l'appel isUsernameAvailable dans le cadre du plugin de validation jQuery, j'en ai donc besoin pour retourner un JSON valide.

34
Chesrae

Peut-être que je me méprends, mais ne pourriez-vous pas définir dataType sur text et JSON.parse () les données renvoyées?

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

Modifié pour ajouter une solution généralement acceptée (auparavant un commentaire uniquement):

Je viens de jeter un œil à api.jquery.com/jQuery.ajax et il semble qu'avec jQuery 1.5 vous pouvez faire une conversion de type de toutes sortes. "plusieurs valeurs séparées par des espaces: à partir de jQuery 1.5, jQuery peut convertir un type de données de ce qu'il a reçu dans l'en-tête Content-Type en ce dont vous avez besoin. Par exemple, si vous souhaitez qu'une réponse textuelle soit traitée comme XML, utilisez" texte xml "pour le type de données." Vous pouvez peut-être essayer "text json".

34
ggutenberg

J'ai eu la même erreur dès que je suis passé à jQuery 1.5. Il s'avère que mon problème est dû au fait que j'utilise également le plugin de validation jquery, qui n'est pas compatible avec jQuery 1.5. Si je supprime le plugin de validation jquery, $ .ajax () avec dataType json fonctionne très bien.

Plus d'informations sur l'incompatibilité du plugin de validation jquery ici: http://bugs.jquery.com/ticket/8118

12
Johnny Oshika

J'ai également reçu "l'analyseur syntaxique jQueryNNNN_NNN n'a pas été appelé" (en utilisant jsonp et jQuery 1.7.2) La raison en était qu'une des valeurs de la structure json renvoyée contenait des retours à la ligne. J'espère que cela aide quelqu'un.

3
Robert

J'ai obtenu parseerror, car url contenait une partie callback=?. Ceci est une chaîne magique qui active la fonctionnalité JSONP .

Comme l'API REST de mon serveur est passée de JSONP à JSON, le format de données renvoyé par celui-ci n'était plus compatible avec jQuery.getJSON(..) avec callback=?. Dans cette situation, jQuery.getJSON(..) n'appellera pas les rappels success, mais les rappels fail à la place.

J'ai résolu ce problème en supprimant la partie callback=? Du paramètre url.

2
Abdull