Получив «parsererror» от jquery для запроса Ajax, я попытался изменить POST на GET, возвращая данные несколькими различными способами (создание классов и т. Д.), Но я не могу понять, в чем проблема.
Мой проект в MVC3, и я использую jQuery 1.5. У меня выпадающий список, и в случае события onchange я запускаю вызов, чтобы получить некоторые данные, основанные на том, что было выбрано.
Раскрывающийся список: (загружает «Представления» из списка в Viewbag, и запуск события работает нормально)
@{
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");
}
});
};
Приведенный выше код успешно вызывает метод MVC и возвращает:
[{"ViewContentID":1,"Name":"TopContent","Note":"Content on the top"},
{"ViewContentID":2,"Name":"BottomContent","Note":"Content on the bottom"}]
Но jquery запускает событие ошибки для метода $ .ajax (), говоря "parsererror".
Ответы:
Я недавно столкнулся с этой проблемой и наткнулся на этот вопрос.
Я решил это гораздо проще.
Способ первый
Вы можете удалить
dataType: 'json'
свойство из литерала объекта ...Способ второй
Или вы можете делать то, что говорил @Sagiv, возвращая ваши данные как
Json
.Причина, по которой
parsererror
возникает это сообщение, заключается в том, что когда вы просто возвращаете строку или другое значение, это на самом деле не такJson
, поэтому синтаксический анализатор дает сбой при его анализе.Поэтому, если вы удалите
dataType: json
свойство, оно не будет пытаться проанализировать его какJson
.С помощью другого метода, если вы обязательно вернете свои данные как
Json
, синтаксический анализатор будет знать, как обрабатывать их правильно.источник
dataType
действительно отключить !Смотрите ответ @ david-east, чтобы узнать, как правильно решить эту проблему.
Этот ответ относится только к ошибке в jQuery 1.5 при использовании протокола file :.
У меня недавно была похожая проблема при обновлении до jQuery 1.5. Несмотря на получение правильного ответа, обработчик ошибок сработал. Я решил это с помощью
complete
события и затем проверил значение статуса. например:источник
{}
. Позор это необходимо....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.ajaxВы указали dataType ответа на вызов ajax как:
где фактический ответ ajax не является допустимым JSON, и в результате анализатор JSON выдает ошибку.
Лучший подход, который я бы порекомендовал, - это изменить dataType на:
и в обратном вызове успеха проверьте, возвращается ли верный JSON или нет, и если проверка JSON не удалась, предупредите об этом на экране, чтобы было очевидно, для какой цели вызов ajax фактически не удался. Посмотри на это:
источник
проблема в том, что ваш контроллер возвращает строку или другой объект, который не может быть проанализирован. Ожидается, что вызов Ajax вернет Json. попробуйте вернуть JsonResult в контроллер следующим образом:
Надеюсь, поможет :)
источник
Ваши данные JSON могут быть неверными. http://jsonformatter.curiousconcept.com/, чтобы проверить это.
источник
Есть много предложений, чтобы удалить
Хотя я допускаю, что это работает, это игнорирует основную проблему. Если вы уверены, что возвращаемая строка действительно является JSON, тогда ищите ошибочные пробелы в начале ответа. Подумайте о том, чтобы взглянуть на это в Fiddler. Моя выглядела так:
В моем случае это была проблема с PHP, извергающим нежелательные символы (в данном случае спецификации файлов UTF). После того, как я удалил их, это решило проблему, сохраняя при этом
источник
Убедитесь, что вы удалите любой код отладки или что-либо еще, что может выводить непреднамеренную информацию. Несколько очевидно, но легко забыть в данный момент.
источник
Я не знаю, если это все еще актуально, но проблема была с кодировкой. Переход на ANSI решил проблему для меня.
источник
Если вы получили эту проблему, используя HTTP GET в IE, я решил эту проблему, установив кеш: false. Поскольку я использовал один и тот же URL для запросов HTML и json, он попал в кеш вместо выполнения вызова json.
источник
Вы должны удалить dataType: "JSON". Затем посмотрите на магию ... причина того, что вы делаете это, заключается в том, что вы конвертируете объект json в простую строку ... поэтому парсер json не может проанализировать эту строку из-за того, что он не является объектом json.
источник
в случае операции Get из веб .net mvc / api, убедитесь, что вы можете получить get
источник
Я также получаю «Запрос возврата с ошибкой: parsererror». в консоли JavaScript. В моем случае это был не вопрос Json, но мне пришлось передать в текстовую область просмотра действительную кодировку.
источник
Я столкнулся с такой ошибкой, но после изменения моего ответа перед отправкой клиенту он работал нормально.
источник
У меня была та же самая проблема, оказалось, что я
web.config
не был тем же самым с моими товарищами по команде. Поэтому, пожалуйста, проверьте свойweb.config
.Надеюсь, это кому-нибудь поможет.
источник
Эта проблема
window.JSON.parse вызывает ошибку в функции $ .parseJSON.
Мое решение
Перегрузка JQuery с помощью инструмента requirejs .
Содержимое файла jquery.overload.js
источник
Если вы не хотите удалять / изменять
dataType: json
, вы можете переопределить строгий анализ jQuery, определив пользовательскийconverter
:Используя это, вы можете настроить поведение, когда ответ не может быть проанализирован как JSON (даже если вы получаете пустое тело ответа!)
С этим пользовательским преобразователем
.done()
/success
будет запускаться, пока запрос в противном случае был успешным (код ответа 1xx или 2xx).источник