#asp.net-mvc-3 #jquery
#asp.net-mvc-3 #jquery ( jquery ) #jquery
Вопрос:
Я успешно отправляю сообщение на свой контроллер со следующим кодом, однако успех никогда не попадает только в ошибку. Что я делаю не так?
JS:
$.ajax({
url: '/Home/Subscribe',
type: 'POST',
dataType: 'json',
data: { email: $('#sube').val() },
success: function (data) {
// get the result and do some magic with it
alert(data.foo);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus);
}
});
Контроллер:
[HttpPost]
public JsonResult Subscribe(string email)
{
return Json(new { foo = "bar", baz = "Blech" });
}
Ответ №1:
В IE нажмите F12, чтобы открыть инструменты разработчика. Перейдите на вкладку «Сеть» и нажмите «Запустить профилировщик». Отправьте запрос на действие подписки — в списке ниже вы увидите подробную информацию об отправленном запросе и возвращенном коде статуса. Дважды щелкните по запросу, чтобы просмотреть подробную информацию — после этого вы сможете увидеть текст вашего ответа. Если запрос не выполнен с ошибкой сервера, вы увидите эту ошибку в теле вашего ответа.
Ответ №2:
Одна ошибка, которую я вижу в вашем коде, заключается в том, что вы жестко закодировали URL:
url: '/Home/Subscribe'
Вы никогда не должны этого делать. Вы всегда должны использовать помощники URL при генерации URL-адресов в ASP.NET Приложение MVC:
url: '@Url.Action("Subscribe", "Home")'
Также вы говорите, что обратный вызов ошибки всегда выполняется, но вы не сказали, что вы наблюдали в FireBug или Chrome Developer toolbar, когда пытались проанализировать запрос AJAX. Если бы вы сделали это, вы бы увидели точную причину сбоя запроса, потому что вы бы увидели, какой запрос отправляется на сервер и какой ответ сервер отправляет обратно клиенту.
Комментарии:
1. Спасибо, Дарин, я буду применять ваши методы.
2. Дарин — продолжение, как бы вы разрешили URL-адреса из файла javascript?
3. @Jreeter, что ты имеешь в виду? Зачем вам разрешать URL-адреса из javascript?
4. Например, вызов url: ‘@Url.Action («Subscribe», «Home»)’ внутри js-файла не будет работать. Жесткое кодирование — это плохо, я согласен, какие еще есть варианты?
Ответ №3:
Ниже приведен мой фрагмент jQuery ajax, который работает. Ваш контроллер выглядит правильно. Я предполагаю, что вы убедились, что он действительно вызывается с помощью точки останова.
var p = {
email: $('#sube').val()
};
$.ajax({
url: '@Url.Action("Subscribe", "Home")'
type: 'POST',
data: JSON.stringify(p),
dataType: "text json",
contentType: "application/json",
success: function (data) {
// get the result and do some magic with it
alert(data.foo);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus);
}
});