Выполнение простого вызова Ajax для контроллера в asp.net mvc
Я пытаюсь начать работу с вызовами ASP.NET MVC Ajax.
контроллер:
public class AjaxTestController : Controller
{
//
// GET: /AjaxTest/
public ActionResult Index()
{
return View();
}
public ActionResult FirstAjax()
{
return Json("chamara", JsonRequestBehavior.AllowGet);
}
}
Посмотреть:
<head runat="server">
<title>FirstAjax</title>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
var serviceURL = '/AjaxTest/FirstAjax';
$.ajax({
type: "POST",
url: serviceURL,
data: param = "",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: successFunc,
error: errorFunc
});
function successFunc(data, status) {
alert(data);
}
function errorFunc() {
alert('error');
}
});
</script>
</head>
Мне просто нужно напечатать предупреждение с помощью метода контроллера, возвращающего данные. Над кодом просто напечатайте "чамара" на мой взгляд. Предупреждение не стреляет.
ОБНОВИТЬ
Я изменил свой контроллер, как показано ниже, и он начал работать. Я не имею четкого представления, почему это работает сейчас. Кто-нибудь, пожалуйста, объясните. Параметр "a" не связан, я добавил его, потому что я не могу добавить два метода с одинаковыми именем и параметрами метода. Я думаю, что это может быть не решением, а его работой
public class AjaxTestController : Controller
{
//
// GET: /AjaxTest/
[HttpGet]
public ActionResult FirstAjax()
{
return View();
}
[HttpPost]
public ActionResult FirstAjax(string a)
{
return Json("chamara", JsonRequestBehavior.AllowGet);
}
}
9 ответов
После обновления, которое вы сделали,
- его первый вызов действия FirstAjax с запросом HttpGet по умолчанию и создает пустое представление Html. (Раньше у тебя не было этого)
- позже при загрузке элементов DOM этого представления ваш вызов Ajax будет запущен и отобразит предупреждение.
Ранее вы только возвращали JSON в браузер без рендеринга HTML. Теперь он имеет представление HTML, где он может получить ваши данные JSON.
Вы не можете напрямую отобразить JSON его обычные данные, а не HTML.
Удалите атрибут данных, как вы не POSTING
ничего на сервер (Ваш контроллер не ожидает каких-либо параметров).
И в вашем методе AJAX вы можете использовать Razor
и использовать @Url.Action
а не статическая строка:
$.ajax({
url: '@Url.Action("FirstAjax", "AjaxTest")',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: successFunc,
error: errorFunc
});
Из вашего обновления:
$.ajax({
type: "POST",
url: '@Url.Action("FirstAjax", "AjaxTest")',
contentType: "application/json; charset=utf-8",
data: { a: "testing" },
dataType: "json",
success: function() { alert('Success'); },
error: errorFunc
});
Используйте Razor для динамического изменения вашего URL, вызывая ваше действие следующим образом:
$.ajax({
type: "POST",
url: '@Url.Action("ActionName", "ControllerName")',
contentType: "application/json; charset=utf-8",
data: { data: "yourdata" },
dataType: "json",
success: function(recData) { alert('Success'); },
error: function() { alert('A error'); }
});
Если вам просто нужно включить метод C# в вашем Ajax Call, вам просто нужно передать два типа вещества и URL-адрес, если ваш запрос получен, вам просто нужно указать только URL-адрес. Пожалуйста, следуйте приведенному ниже коду, он работает нормально.
C# Code
[HttpGet]
public ActionResult FirstAjax()
{
return Json("chamara", JsonRequestBehavior.AllowGet);
}
Java Script Code if Get Request
$.ajax({
url: 'home/FirstAjax',
success: function(responce){ alert(responce.data)},
error: function(responce){ alert(responce.data)}
});
Java Script Code if Post Request and also [HttpGet] to [HttpPost]
$.ajax({
url: 'home/FirstAjax',
type:'POST',
success: function(responce){ alert(responce)},
error: function(responce){ alert(responce)}
});
Примечание: если вы FirstAjax в том же контроллере, в котором ваш View Controller, тогда не нужно указывать имя контроллера в URL. лайк url: 'FirstAjax',
Во-первых, нет необходимости иметь две разные версии библиотек jquery на одной странице. Для работы вызовов ajax достаточно "1.9.1" или "2.0.0".
Вот код вашего контроллера:
public ActionResult Index()
{
return View();
}
public ActionResult FirstAjax(string a)
{
return Json("chamara", JsonRequestBehavior.AllowGet);
}
Вот как должен выглядеть ваш взгляд:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
var a = "Test";
$.ajax({
url: "../../Home/FirstAjax",
type: "GET",
data: { a : a },
success: function (response) {
alert(response);
},
error: function (response) {
alert(response);
}
});
});
</script>
Это на ваш вопрос ОБНОВЛЕНИЯ.
Поскольку у вас не может быть двух методов с одинаковыми именем и подписью, вы должны использовать атрибут ActionName:
ОБНОВИТЬ:
[HttpGet]
public ActionResult FirstAjax()
{
Some Code--Some Code---Some Code
return View();
}
[HttpPost]
[ActionName("FirstAjax")]
public ActionResult FirstAjaxPost()
{
Some Code--Some Code---Some Code
return View();
}
И, пожалуйста, обратитесь к этой ссылке для получения дополнительной информации о том, как метод становится действием. Очень хорошая ссылка, хотя.
Посмотреть;
$.ajax({
type: 'GET',
cache: false,
url: '/Login/Method',
dataType: 'json',
data: { },
error: function () {
},
success: function (result) {
alert("success")
}
});
Метод контроллера;
public JsonResult Method()
{
return Json(new JsonResult()
{
Data = "Result"
}, JsonRequestBehavior.AllowGet);
}
Вместо url: serviceURL,
использование
url: '<%= serviceURL%>',
и вы передаете 2 параметра в successFunc?
function successFunc(data)
{
alert(data);
}
Добавьте "JsonValueProviderFactory" в global.asax:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
}