Стиль вопросов / ответов
Каков наилучший способ ввести URL-адрес действия для URL-адреса в вызов Ajax?
Здесь нет соглашения, и это также во многом зависит от того, как ваш контент был доставлен клиенту. Было ли это с помощью представлений / частичных представлений (в этом случае вы могли генерировать URL-адреса с помощью вспомогательных методов Html
/ Url
или это было чисто сгенерировано на клиенте (шаблонизатор и т. Д.). Довольно часто мы просто хотим использовать некоторые обычные элементы HTML расширить поведение Ajax (например, формы, кнопки и ссылки). В этой ситуации лучше предоставить правильные URL-адреса, которые мы также можем прочитать из них, и использовать их в наших сценариях (например, href
в ссылках). пользователей, на которые указывают вещи. Будем ли мы преобразовывать их в запросы GET / POST / DELETE / PUT, больше не имеет значения. Я бы предложил избегать жесткого кодирования URL-адресов в ваших сценариях, поскольку вы можете изменить маршрутизацию или предоставить другие средства обработка. Использование помощников Html
везде, где это возможно, намного лучший способ обслуживания. При добавлении URL-адресов к элементам, которые не поддерживают их автоматически (без атрибута href
или src
), вы всегда можете добавить их как пользовательские. атрибуты, особенно когда вы используете атрибут данных (например, data-href
или аналогичный). Сообщение в блоге Джона Ресига об этом.
Каковы соображения при выборе JsonBehavior?
Лучше всего делать POST-запросы, когда нужно вернуть Json. В GET-запросах вы должны знать о возможных последствиях JSON Hijacking , это также причина, почему вы должны явно указать, что вы разрешаете получать запросы с результатами JSON.
Как лучше всего обрабатывать ошибки на стороне сервера?
Лучший способ обработки ошибок сервера (которые не могут и не должны подавляться) - это на самом деле информировать пользователя об ошибке. Подробности этого обычно не важны, так как пользователи не разбираются в разработке, но говорить им, что что-то пошло не так, это нормально. Особенно, если вы можете предложить им какое-то решение. А с помощью вызова Ajax можно возвращать ошибки как ошибки, которые могут быть обработаны с помощью функций Javascript обработчика ошибок. Я написал сообщение в блоге , в котором подробно описан весь процесс , а также приведен код, показывающий, как правильно обрабатывать ошибки проверки. Лично я считаю, что возвращать ошибки как успех неправильно. следовательно, я не Но это аргументировано. Действия моего контроллера довольно упрощены благодаря коду, который я использую:
[HandleModelStateException]
public ActionResult AddUser(User user)
{
if (!this.ModelState.IsValid)
{
throw new ModelStateException(this.ModelState);
}
// process valid data
}
Должен ли обратный вызов error () на стороне клиента вызываться какими-либо ошибками (т. Е. Непредвиденными OutOfMemoryException
) или только предвидимыми ошибками (т. Е. Неверными данными)?
Как указывалось ранее, об ошибках следует сообщать пользователям, когда они получат неожиданные результаты от того, что они инициировали. Не подавляйте ошибки, о которых им следует сообщать. Но не вдавайтесь в подробности. Исключение из-за недостатка памяти слишком сложно объяснить обычным пользователям компьютера. Сообщите что-нибудь дружелюбное и короткое.
Каков наилучший способ экспорта ошибок для запуска обратного вызова error()
.
Посмотрите мое сообщение в блоге и проверьте код, чтобы увидеть, как создавать ошибки, которые обрабатываются функцией error()
Лучший способ обеспечить обратный вызов ошибки - получить правильный код состояния и текст ответа.
То же сообщение в блоге
Если ошибки проверки приводят к ошибке StatusCode
или они должны быть частью отвечающего объекта проверки.
Ошибки валидации по сути являются предупреждениями и должны рассматриваться как таковые. Вот почему вы можете увидеть положительный шаблон проверки формы на некоторых сайтах, которые также сообщают о достоверности данных, а не просто информировать пользователей о том, что они совершили еще одну ошибку. Ошибки валидации обычно коренятся в недопустимом пользовательском интерфейсе и недостаточной информации.
Как лучше всего обрабатывать ошибки на стороне клиента?
Это во многом зависит от вашего приложения, но я предлагаю вам следовать проверенным шаблонам, потому что пользователи, скорее всего, узнают подробности и не будут их путать.Как вы думаете, почему OpenOffice использует практически такой же интерфейс, как Microsoft Office?Потому что пользователи знают, как это работает, поэтому, скорее всего, познакомятся с приложением быстро и безболезненно.Но если вы можете, не относитесь к пользователям как к глупым людям.Используйте положительную проверку.Некоторые ошибки также должны отображаться как ошибки.Ой.Btw.Я использую ненавязчивую информацию в своем приложении, где информация, такая как успешная работа, сообщается пользователям, но не мешает их работе.Через некоторое время он автоматически исчезает.Подобно тому, что делает GMail.Он просто сообщает вам, что письмо было отправлено, и эта информация не нуждается в подтверждении.
jQuery ajax()
functin поддерживает функции успеха и ошибок, поэтому разумно использовать оба.Снова: возвращать ошибки как успех не правильно.Нам не понадобятся функции ошибок, чем вообще.Мой фильтр действий HandleModelState возвращает ошибки с конкретным кодом ошибки 400, который также можно использовать, и его результат.
$.ajax({
url: $(this).attr("href"),
data: someDataObj,
type: "POST",
success: function(data){
// process data
},
error: function(xhr, status, err){
if (xhr.status = 400) {
// handle my error in xhr.resposeText
}
else {
// handle other errors that are cause by unknown processing
}
}
});
Должны ли непредвиденные ошибки на стороне сервера отображаться так же, как и сводка проверки?Может быть, просто " что-то пошло не так " диалог?Должен ли клиент различать эти два?
Людям не нравятся большие красные предупреждения.Если что-то является предупреждением по своей природе, оно должно рассматриваться более дружелюбно, чем фактические ошибки, которые мешают вашему приложению работать должным образом.В частности, валидация должна быть очень дружелюбной.Ошибки должны подтверждаться пользователями, а предупреждения, возможно, не должны.Зависит от их натуры.Но если это так, то, вероятно, это ошибки.
Надеюсь, это кое-что прояснит для вас.