Nachdem ich von jquery einen "Parsererror" für eine Ajax-Anfrage erhalten habe, habe ich versucht, den POST in einen GET zu ändern und die Daten auf verschiedene Arten zurückzugeben (Klassen erstellen usw.), aber ich kann nicht herausfinden, wo das Problem liegt.
Mein Projekt befindet sich in MVC3 und ich verwende jQuery 1.5. Ich habe ein Dropdown-Menü und beim Onchange-Ereignis starte ich einen Anruf, um einige Daten basierend auf den ausgewählten Daten abzurufen.
Dropdown: (Dies lädt die "Ansichten" aus der Liste im Viewbag und das Auslösen des Ereignisses funktioniert einwandfrei.)
@{
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");
}
});
};
Der obige Code ruft erfolgreich die MVC-Methode auf und gibt Folgendes zurück:
[{"ViewContentID":1,"Name":"TopContent","Note":"Content on the top"},
{"ViewContentID":2,"Name":"BottomContent","Note":"Content on the bottom"}]
Aber jquery löst das Fehlerereignis für die $ .ajax () -Methode aus, die "parsererror" sagt.
Antworten:
Ich bin kürzlich auf dieses Problem gestoßen und auf diese Frage gestoßen.
Ich habe es viel einfacher gelöst.
Methode Eins
Sie können die
dataType: 'json'
Eigenschaft entweder aus dem Objektliteral entfernen ...Methode Zwei
Oder Sie können das tun, was @Sagiv gesagt hat, indem Sie Ihre Daten als zurückgeben
Json
.Der Grund, warum diese
parsererror
Nachricht auftritt, ist, dass wenn Sie einfach eine Zeichenfolge oder einen anderen Wert zurückgeben, dies nicht wirklichJson
der Fall ist , sodass der Parser beim Parsen fehlschlägt.Wenn Sie die
dataType: json
Eigenschaft entfernen , wird nicht versucht, sie als zu analysierenJson
.Wenn Sie bei der anderen Methode sicherstellen, dass Ihre Daten als zurückgegeben werden
Json
, weiß der Parser, wie er richtig damit umgeht.quelle
dataType
!In der Antwort von @ david-east finden Sie Informationen zur korrekten Behandlung des Problems
Diese Antwort ist nur für einen Fehler mit jQuery 1.5 relevant, wenn das Protokoll file: verwendet wird.
Ich hatte kürzlich ein ähnliches Problem beim Upgrade auf jQuery 1.5. Trotz korrekter Antwort wurde der Fehlerbehandler ausgelöst. Ich habe es behoben, indem ich das
complete
Ereignis verwendet und dann den Statuswert überprüft habe. z.B:quelle
{}
. Schade, dass das notwendig ist....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.ajaxSie haben den Ajax- Anrufantwortdatentyp wie folgt angegeben :
Wobei die eigentliche Ajax-Antwort kein gültiger JSON ist und der JSON-Parser daher einen Fehler auslöst.
Der beste Ansatz, den ich empfehlen würde, ist das Ändern des Datentyps in:
Überprüfen Sie im Rahmen des erfolgreichen Rückrufs, ob ein gültiger JSON zurückgegeben wird oder nicht. Wenn die JSON-Überprüfung fehlschlägt, benachrichtigen Sie ihn auf dem Bildschirm, damit ersichtlich ist, zu welchem Zweck der Ajax-Aufruf tatsächlich fehlschlägt. Schau dir das an:
quelle
Das Problem ist, dass Ihr Controller eine Zeichenfolge oder ein anderes Objekt zurückgibt, das nicht analysiert werden kann. Der Ajax-Anruf sollte Json zurückbringen. Versuchen Sie, JsonResult im Controller wie folgt zurückzugeben:
ich hoffe es hilft :)
quelle
Ihre JSON-Daten sind möglicherweise falsch. http://jsonformatter.curiousconcept.com/ , um es zu validieren.
quelle
Es gibt viele Vorschläge zum Entfernen
Obwohl ich zugebe, dass dies funktioniert, ignoriert es das zugrunde liegende Problem. Wenn Sie sicher sind, dass die Rückgabezeichenfolge wirklich JSON ist, suchen Sie zu Beginn der Antwort nach fehlerhaften Leerzeichen. Betrachten Sie es in Fiddler. Meins sah so aus:
In meinem Fall war dies ein Problem mit PHP, das unerwünschte Zeichen ausspuckte (in diesem Fall UTF-Stücklisten). Sobald ich diese entfernt habe, wurde das Problem behoben und gleichzeitig beibehalten
quelle
Stellen Sie sicher, dass Sie Debug-Code oder andere Elemente entfernen, die möglicherweise unbeabsichtigte Informationen ausgeben. Etwas offensichtlich, aber im Moment leicht zu vergessen.
quelle
Ich weiß nicht, ob dies noch aktuell ist, aber das Problem war mit der Codierung. Der Wechsel zu ANSI hat das Problem für mich gelöst.
quelle
Wenn Sie dieses Problem mit HTTP GET im IE erhalten, habe ich dieses Problem durch Setzen des Caches: false behoben. Da ich für HTML- und JSON-Anforderungen dieselbe URL verwendet habe, wurde sie in den Cache verschoben, anstatt einen JSON-Aufruf auszuführen.
quelle
Sie sollten den Datentyp "json" entfernen. Dann sehen Sie sich die Magie an ... Der Grund dafür ist, dass Sie ein JSON-Objekt in eine einfache Zeichenfolge konvertieren. Daher kann der JSON-Parser diese Zeichenfolge nicht analysieren, da er kein JSON-Objekt ist.
quelle
Stellen Sie im Falle des Abrufvorgangs von web .net mvc / api sicher, dass Sie get zulassen
quelle
Ich erhielt auch "Rückgabe mit Fehler anfordern: Parsererror". in der Javascript-Konsole. In meinem Fall ging es nicht um Json, aber ich musste eine gültige Codierung an den Ansichtstextbereich übergeben.
quelle
Ich habe einen solchen Fehler festgestellt, aber nachdem ich meine Antwort geändert habe, bevor ich sie an den Client gesendet habe, hat sie einwandfrei funktioniert.
quelle
Ich hatte das gleiche Problem, es stellte sich heraus, dass ich
web.config
mit meinen Teamkollegen nicht dasselbe war. Bitte überprüfen Sie Ihreweb.config
.Hoffe das hilft jemandem.
quelle
Das Problem
window.JSON.parse löst einen Fehler in der Funktion $ .parseJSON aus.
Meine Lösung
Überladen von JQuery mit dem Tool requirejs .
Inhalt der Datei jquery.overload.js
quelle
Wenn Sie nicht entfernen / ändern möchten
dataType: json
, können Sie die strikte Analyse von jQuery überschreiben, indem Sie eine benutzerdefinierte Funktion definierenconverter
:Auf diese Weise können Sie das Verhalten anpassen, wenn die Antwort nicht als JSON analysiert werden kann (selbst wenn Sie einen leeren Antworttext erhalten!).
Mit diesem benutzerdefinierten Konverter wird
.done()
/success
ausgelöst, solange die Anforderung ansonsten erfolgreich war (1xx- oder 2xx-Antwortcode).quelle