Ошибка синтаксиса с parseJSON во время ненавязчивой проверки
В моем приложении MVC создается следующий HTML-код, который вызывает синтаксическую ошибку Javascript при представлении (я не ввожу ничего в два текстовых поля). Здесь созданный HTML и обработчик отправки:
<form action="/UrIntake/Save" id="UrIntakeForm" method="post">
<input data-val="true" data-val-length="The field LastName must be a string with a maximum length of 50." data-val-length-max="50" data-val-required="The LastName field is required." id="FormSubmitter_LastName" name="FormSubmitter.LastName" type="text" value="" />
<input data-val="true" data-val-length="The field FirstName must be a string with a maximum length of 50." data-val-length-max="50" data-val-required="The FirstName field is required." id="FormSubmitter_FirstName" name="FormSubmitter.FirstName" type="text" value="" />
<div id="SubmissionButtons" class="right">
<input type="button" onclick="SubmitForm()" value="Submit" />
<input type="button" onclick="CancelForm()" value="Cancel" />
</div>
</form>
function SubmitForm() {
$("#UrIntakeForm").valid();
.
.
.
Это код jQuery, в котором происходит синтаксическая ошибка (v1.9.0). "данные" undefined, а строка "return" - это ошибка:
parseJSON: function( data ) {
// Attempt to parse using the native JSON parser first
if ( window.JSON && window.JSON.parse ) {
return window.JSON.parse( data );
}
Предположительно, мне не нужно вводить что-либо в текстовые поля (и тогда должно появиться сообщение "поле обязательно" ). Это то, что вызывает ошибку? Это не имеет смысла, но я не понимаю, что еще может быть.
Ответы
Ответ 1
Причина
Это проблема с jquery.validate.unobtrusive.js
в вашем пакете ASP.NET.MVC.
Как и в jQuery 1.9, поведение parseJSON()
изменилось, и значение undefined
будет считаться некорректным JSON, что приведет к указанной вами ошибке. Подробнее см. В Руководстве по обновлению ядра jQuery 1.9.
Решение
Используйте плагин jQuery Migrate, который, помимо прочего, добавляет обратно-совместимость к утилите jQuery parseJSON()
.
ИЗМЕНИТЬ
Согласно официальному объявлению в этом потоке в Microsoft Connect, проблема была устранена в последней версии фреймворка.
Естественно, как отметил Андреас Ларсен в комментариях, после обновления до новой версии обязательно очистите любой соответствующий кэш, сервер и клиентскую сторону.
Ответ 2
У меня также была эта проблема. Проблема заключалась в том, что $.parseJSON(undefined) вызывает исключение, и что ненавязчивая проверка делала этот вызов. Как указано в принятом ответе, с тех пор это исправлено.
Вы можете загрузить версию Microsoft этого script, которая будет правильно проверять, не вызывая исключения из этой ссылки: http://ajax.aspnetcdn.com/ajax/mvc/5.1/jquery.validate.unobtrusive.min.js p >