Ich versuche, mit ASP.NET MVC Ajax-Aufrufen zu beginnen.
Controller:
public class AjaxTestController : Controller
{
//
// GET: /AjaxTest/
public ActionResult Index()
{
return View();
}
public ActionResult FirstAjax()
{
return Json("chamara", JsonRequestBehavior.AllowGet);
}
}
Ansicht:
<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>
Ich muss nur eine Warnung mit der Controller-Methode ausdrucken, die Daten zurückgibt. Über Code drucken Sie einfach "Chamara" auf meiner Ansicht. Ein Alarm wird nicht ausgelöst.
UPDATE
Ich habe meinen Controller wie folgt geändert und er funktioniert nun. Ich habe keine klare Vorstellung, warum es jetzt funktioniert. Jemand bitte erklären. Der Parameter "a" hat nichts damit zu tun. Ich habe ihn hinzugefügt, weil ich nicht zwei Methoden mit demselben Methodennamen und denselben Parametern hinzufügen kann. Ich denke, dies ist möglicherweise nicht die Lösung, aber es funktioniert
public class AjaxTestController : Controller
{
//
// GET: /AjaxTest/
[HttpGet]
public ActionResult FirstAjax()
{
return View();
}
[HttpPost]
public ActionResult FirstAjax(string a)
{
return Json("chamara", JsonRequestBehavior.AllowGet);
}
}
Nach dem Update haben Sie getan,
Früher haben Sie JSON nur an den Browser zurückgegeben, ohne HTML-Code zu rendern. Jetzt wird eine HTML-Ansicht gerendert, in der Ihre JSON-Daten abgerufen werden können.
Sie können JSON seine einfachen Daten nicht direkt als HTML rendern.
Entfernen Sie das Datenattribut, da Sie dem Server nichts POSTING
mitteilen (Ihr Controller erwartet keine Parameter).
Und in Ihrer AJAX Methode können Sie Razor
verwenden und @Url.Action
statt einer statischen Zeichenfolge:
$.ajax({
url: '@Url.Action("FirstAjax", "AjaxTest")',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: successFunc,
error: errorFunc
});
Von Ihrem Update:
$.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
});
Verwenden Sie einen Rasierer, um Ihre URL dynamisch zu ändern, indem Sie Ihre Aktion folgendermaßen aufrufen:
$.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'); }
});
Es ist für Ihre UPDATE-Frage.
Da Sie nicht über zwei Methoden mit demselben Namen und derselben Signatur verfügen können, müssen Sie das ActionName-Attribut verwenden:
AKTUALISIEREN:
[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();
}
Und bitte lesen Sie this link, um weitere Informationen darüber zu erhalten, wie eine Methode zu einer Aktion wird. Sehr gute Referenz.
Als erstes ist es nicht erforderlich, zwei verschiedene Versionen von jquery-Bibliotheken auf einer Seite zu haben. Entweder "1.9.1" oder "2.0.0" reichen aus, um Ajax-Aufrufe zum Laufen zu bringen.
Hier ist Ihr Controller-Code:
public ActionResult Index()
{
return View();
}
public ActionResult FirstAjax(string a)
{
return Json("chamara", JsonRequestBehavior.AllowGet);
}
So sollte Ihre Ansicht aussehen:
<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>
Wenn Sie in Ihrem Ajax-Aufruf nur die C # -Methode aktivieren müssen, müssen Sie nur zwei Materietypen und eine URL übergeben, wenn Ihre Anfrage eingeht, müssen Sie nur die URL angeben. Bitte folgen Sie dem unten stehenden Code.
C # -Code:
[HttpGet]
public ActionResult FirstAjax()
{
return Json("chamara", JsonRequestBehavior.AllowGet);
}
Java Script Code wenn Get Request
$.ajax({
url: 'home/FirstAjax',
success: function(responce){ alert(responce.data)},
error: function(responce){ alert(responce.data)}
});
Java Script Code wenn Post Request und auch [HttpGet] to [HttpPost]
$.ajax({
url: 'home/FirstAjax',
type:'POST',
success: function(responce){ alert(responce)},
error: function(responce){ alert(responce)}
});
Hinweis: Wenn Sie FirstAjax in demselben Controller verwenden, in dem sich Ihr View Controller befindet, müssen Sie in der URL keinen Controllernamen eingeben. mögen url: 'FirstAjax',
Aussicht;
$.ajax({
type: 'GET',
cache: false,
url: '/Login/Method',
dataType: 'json',
data: { },
error: function () {
},
success: function (result) {
alert("success")
}
});
Controller-Methode;
public JsonResult Method()
{
return Json(new JsonResult()
{
Data = "Result"
}, JsonRequestBehavior.AllowGet);
}
Fügen Sie "JsonValueProviderFactory" in global.asax hinzu:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
}
anstatt url: serviceURL,
verwenden
url: '<%= serviceURL%>',
und übergeben Sie 2 Parameter an successFunc?
function successFunc(data)
{
alert(data);
}