J'ai obtenu un "parsererror" de jquery pour une requête Ajax, j'ai essayé de changer le POST en GET, renvoyant les données de différentes manières (création de classes, etc.) mais je n'arrive pas à comprendre quel est le problème.
Mon projet est dans MVC3 et j'utilise jQuery 1.5 J'ai une liste déroulante et sur l'événement onchange, je déclenche un appel pour obtenir des données en fonction de ce qui a été sélectionné.
Liste déroulante: (cela charge les "Vues" de la liste dans le Viewbag et déclencher l'événement fonctionne très bien)
@{
var viewHtmls = new Dictionary<string, object>();
viewHtmls.Add("data-bind", "value: ViewID");
viewHtmls.Add("onchange", "javascript:PageModel.LoadViewContentNames()");
}
@Html.DropDownList("view", (List<SelectListItem>)ViewBag.Views, viewHtmls)
Javascript:
this.LoadViewContentNames = function () {
$.ajax({
url: '/Admin/Ajax/GetViewContentNames',
type: 'POST',
dataType: 'json',
data: { viewID: $("#view").val() },
success: function (data) {
alert(data);
},
error: function (data) {
debugger;
alert("Error");
}
});
};
Le code ci-dessus appelle avec succès la méthode MVC et retourne:
[{"ViewContentID":1,"Name":"TopContent","Note":"Content on the top"},
{"ViewContentID":2,"Name":"BottomContent","Note":"Content on the bottom"}]
Mais jquery déclenche l'événement d'erreur pour la méthode $ .ajax () en disant "parsererror".
Réponses:
J'ai récemment rencontré ce problème et suis tombé sur cette question.
Je l'ai résolu d'une manière beaucoup plus simple.
Méthode un
Vous pouvez soit supprimer la
dataType: 'json'
propriété du littéral objet ...Deuxième méthode
Ou vous pouvez faire ce que @Sagiv disait en renvoyant vos données sous la forme
Json
.La raison pour laquelle ce
parsererror
message apparaît est que lorsque vous renvoyez simplement une chaîne ou une autre valeur, ce n'est pas vraiment le casJson
, de sorte que l'analyseur échoue lors de son analyse.Donc, si vous supprimez la
dataType: json
propriété, il n'essaiera pas de l'analyser commeJson
.Avec l'autre méthode, si vous vous assurez de renvoyer vos données comme
Json
, l'analyseur saura comment les gérer correctement.la source
dataType
!Voir la réponse de @ david-east pour savoir comment gérer correctement le problème
Cette réponse n'est pertinente que pour un bogue avec jQuery 1.5 lors de l'utilisation du file: protocol.
J'ai eu un problème similaire récemment lors de la mise à niveau vers jQuery 1.5. Malgré une réponse correcte, le gestionnaire d'erreurs s'est déclenché. Je l'ai résolu en utilisant l'
complete
événement, puis en vérifiant la valeur de l'état. par exemple:la source
{}
. Dommage que ce soit nécessaire....The JSON data is parsed in a strict manner; any malformed JSON is rejected and a parse error is thrown. As of jQuery 1.9, an empty response is also rejected; the server should return a response of null or {} instead.
api.jquery.com/jQuery.ajaxVous avez spécifié le dataType de réponse à l'appel ajax comme suit :
où comme la réponse ajax réelle n'est pas un JSON valide et par conséquent, l'analyseur JSON lève une erreur.
La meilleure approche que je recommanderais est de changer le dataType en:
et dans le rappel de réussite, vérifiez si un JSON valide est retourné ou non, et si la validation JSON échoue, alertez-le à l'écran afin qu'il soit évident dans quel but l'appel ajax échoue réellement. Jetez un œil à ceci:
la source
le problème est que votre contrôleur renvoie une chaîne ou un autre objet qui ne peut pas être analysé. l'appel ajax devrait obtenir Json en retour. essayez de retourner JsonResult dans le contrôleur comme ça:
J'espère que ça aide :)
la source
Vos données JSON peuvent être erronées. http://jsonformatter.curiousconcept.com/ pour le valider.
la source
Il y a beaucoup de suggestions à supprimer
Bien que j'accorde que cela fonctionne, il ignore le problème sous-jacent. Si vous êtes sûr que la chaîne de retour est vraiment JSON, recherchez un espace blanc errant au début de la réponse. Pensez à y jeter un œil dans Fiddler. Le mien ressemblait à ceci:
Dans mon cas, c'était un problème avec PHP crachant des caractères indésirables (dans ce cas, les nomenclatures de fichiers UTF). Une fois que je les ai supprimés, cela a résolu le problème tout en conservant
la source
Assurez-vous de supprimer tout code de débogage ou tout autre élément susceptible de générer des informations non souhaitées. Un peu évident, mais facile à oublier sur le moment.
la source
Je ne sais pas si cela est toujours réel mais le problème était avec l'encodage. Le passage à ANSI a résolu le problème pour moi.
la source
Si vous rencontrez ce problème en utilisant HTTP GET dans IE, j'ai résolu ce problème en définissant le cache: false. Comme j'ai utilisé la même URL pour les requêtes HTML et json, elle a frappé le cache au lieu de faire un appel json.
la source
vous devez supprimer le dataType: "json". Ensuite, voyez la magie ... la raison de faire une telle chose est que vous convertissez un objet json en une chaîne simple ... donc json parser n'est pas capable d'analyser cette chaîne car il n'est pas un objet json.
la source
en cas d'opération Get à partir du web .net mvc / api, assurez-vous que vous êtes autorisé à obtenir
la source
J'obtenais également "Demande de retour avec erreur: parsererror." dans la console javascript. Dans mon cas, ce n'était pas une question de Json, mais je devais passer à la zone de texte de vue un encodage valide.
la source
J'ai rencontré une telle erreur, mais après avoir modifié ma réponse avant de l'envoyer au client, cela a bien fonctionné.
la source
J'ai eu le même problème, il s'est avéré que ce
web.config
n'était pas la même chose avec mes coéquipiers. Veuillez donc vérifier votreweb.config
.J'espère que cela aide quelqu'un.
la source
Le problème
window.JSON.parse génère une erreur dans la fonction $ .parseJSON.
Ma solution
Surcharge de JQuery à l'aide de l' outil requirejs .
Contenu du fichier jquery.overload.js
la source
Si vous ne souhaitez pas supprimer / modifier
dataType: json
, vous pouvez remplacer l'analyse stricte de jQuery en définissant un personnaliséconverter
:En utilisant cela, vous pouvez personnaliser le comportement lorsque la réponse ne peut pas être analysée en tant que JSON (même si vous obtenez un corps de réponse vide!)
Avec ce convertisseur personnalisé,
.done()
/success
sera déclenché tant que la demande a réussi autrement (code de réponse 1xx ou 2xx).la source