Dostaję „parsererror” z jquery dla żądania Ajax, próbowałem zmienić POST na GET, zwracając dane na kilka różnych sposobów (tworzenie klas itp.), Ale wydaje mi się, że nie wiem, na czym polega problem.
Mój projekt jest w MVC3 i używam jQuery 1.5 Mam listę rozwijaną i przy zdarzeniu onchange odpalam połączenie, aby uzyskać dane na podstawie tego, co zostało wybrane.
Lista rozwijana: (ładuje to „Widoki” z listy w Viewbag i odpalenie wydarzenia działa dobrze)
@{
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");
}
});
};
Powyższy kod z powodzeniem wywołuje metodę MVC i zwraca:
[{"ViewContentID":1,"Name":"TopContent","Note":"Content on the top"},
{"ViewContentID":2,"Name":"BottomContent","Note":"Content on the bottom"}]
Ale jquery odpala zdarzenie błędu dla metody $ .ajax () mówiąc „parsererror”.
Odpowiedzi:
Ostatnio napotkałem ten problem i natknąłem się na to pytanie.
Rozwiązałem to znacznie łatwiej.
Metoda pierwsza
Możesz albo usunąć
dataType: 'json'
właściwość z literału obiektu ...Metoda druga
Możesz też zrobić to, co mówił @Sagiv, zwracając dane jako
Json
.Powodem, dla którego
parsererror
pojawia się ten komunikat, jest to, że po prostu zwracając ciąg lub inną wartość, tak naprawdę nie jestJson
, więc analizator nie działa podczas analizowania.Jeśli więc usuniesz
dataType: json
właściwość, nie będzie ona próbować go analizować jakoJson
.Drugą metodą, jeśli zwrócisz dane jako
Json
, analizator składni będzie wiedział, jak poprawnie je obsługiwać.źródło
dataType
!Zobacz odpowiedź @ david-east, aby dowiedzieć się, jak rozwiązać problem
Ta odpowiedź dotyczy tylko błędu w jQuery 1.5 podczas korzystania z pliku: protokół.
Miałem ostatnio podobny problem podczas aktualizacji do jQuery 1.5. Pomimo otrzymania poprawnej odpowiedzi program obsługi błędów uruchomił się. Rozwiązałem go, używając
complete
zdarzenia, a następnie sprawdzając wartość statusu. na przykład:źródło
{}
. Szkoda, że to konieczne....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.ajaxPodano dataType wywołania ajaxType jako:
gdzie jako faktyczna odpowiedź ajax nie jest prawidłowym JSON, w wyniku czego parser JSON zgłasza błąd.
Najlepszym podejściem, które poleciłbym, jest zmiana dataType na:
i w ramach wywołania zwrotnego powodzenia sprawdź, czy poprawny JSON jest zwracany, czy nie, a jeśli sprawdzanie poprawności JSON nie powiedzie się, zaalarmuj go na ekranie, aby było oczywiste, w jakim celu wywołanie ajax faktycznie nie działa. Zerknij na to:
źródło
Problem polega na tym, że kontroler zwraca ciąg znaków lub inny obiekt, którego nie można przeanalizować. oczekuje, że wywołanie ajax otrzyma w zamian Jsona. spróbuj zwrócić JsonResult w kontrolerze w następujący sposób:
mam nadzieję, że to pomoże :)
źródło
Twoje dane JSON mogą być niepoprawne. http://jsonformatter.curiousconcept.com/, aby to sprawdzić.
źródło
Istnieje wiele sugestii do usunięcia
Przyznaję, że to działa, ale ignoruje podstawowy problem. Jeśli masz pewność, że zwracanym ciągiem jest JSON, poszukaj błędnych białych znaków na początku odpowiedzi. Zastanów się, czy nie spojrzeć na to w skrzypaczu. Mój wyglądał tak:
W moim przypadku był to problem z PHP wyrzucającymi niechciane znaki (w tym przypadku LM pliku UTF). Po ich usunięciu naprawiłem problem, jednocześnie zachowując
źródło
Upewnij się, że usunąłeś kod debugowania lub cokolwiek innego, co może generować niezamierzone informacje. Nieco oczywiste, ale w tej chwili łatwe do zapomnienia.
źródło
Nie wiem, czy to nadal jest aktualne, ale problem dotyczył kodowania. Przejście na ANSI rozwiązało problem dla mnie.
źródło
Jeśli ten problem występuje przy użyciu HTTP GET w IE, rozwiązałem ten problem, ustawiając cache: false. Ponieważ użyłem tego samego adresu URL zarówno dla żądań HTML, jak i Json, trafił on do pamięci podręcznej zamiast wykonywać wywołanie Json.
źródło
powinieneś usunąć dataType: „json”. Następnie zobacz magię ... powodem takiego działania jest to, że konwertujesz obiekt json na prosty ciąg .. więc parser json nie jest w stanie przeanalizować tego ciągu ze względu na to, że nie jest obiektem json.
źródło
w przypadku Get operacji z sieci .net mvc / api, upewnij się, że masz zezwolenie na uzyskanie
źródło
Otrzymywałem również „Żądanie zwrotu z błędem: parsererror”. w konsoli javascript. W moim przypadku nie było to kwestią Jsona, ale musiałem przekazać poprawne kodowanie w polu tekstowym widoku.
źródło
Wystąpił taki błąd, ale po zmodyfikowaniu odpowiedzi przed wysłaniem jej do klienta zadziałało dobrze.
źródło
Miałem ten sam problem, okazało się, że
web.config
nie był taki sam z kolegami z drużyny. Więc proszę sprawdź swojeweb.config
.Mam nadzieję, że to komuś pomoże.
źródło
Problem
window.JSON.parse wywołuje błąd w funkcji $ .parseJSON.
Moje rozwiązanie
Przeciążenie JQuery za pomocą narzędzia RequJS .
zawartość pliku jquery.overload.js
źródło
Jeśli nie chcesz usuwać / zmieniać
dataType: json
, możesz zastąpić ścisłą analizę jQuery, definiując niestandardoweconverter
:Za pomocą tego można dostosować zachowanie, gdy odpowiedź nie może zostać przeanalizowana jako JSON (nawet jeśli otrzymasz pustą treść odpowiedzi!)
W tym niestandardowym konwerterze
.done()
/success
będzie uruchamiane, dopóki żądanie nie zostanie pomyślnie wykonane (kod odpowiedzi 1xx lub 2xx).źródło