私は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>
コントローラメソッドがデータを返すようにアラートを印刷するだけです。上記のコードは、私の考えでは「chamara」と表示するだけです。アラートは発生していません。
UPDATE
私は以下のように私のコントローラを修正しました、そしてそれは働き始めます。なぜそれが今うまくいっているのか、私には明確な考えがありません。何人か説明してください。私は同じメソッド名とパラメータを持つ2つのメソッドを追加することはできませんので、私はこれを追加しました関連していません。
public class AjaxTestController : Controller
{
//
// GET: /AjaxTest/
[HttpGet]
public ActionResult FirstAjax()
{
return View();
}
[HttpPost]
public ActionResult FirstAjax(string a)
{
return Json("chamara", JsonRequestBehavior.AllowGet);
}
}
更新が終わったら、
以前はHTMLをレンダリングせずにJSONをブラウザに戻すだけでした。これで、JSONデータを取得できる場所にHTMLビューがレンダリングされました。
JSONのHTMLではなくプレーンデータを直接レンダリングすることはできません。
POSTING
はサーバーに何もしていないのでdata属性を削除してください(あなたのコントローラーはパラメーターを期待していません)。
そして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'); }
});
あなたのUPDATEに関する質問です。
同じ名前とシグネチャを持つ2つのメソッドを持つことはできないので、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();
}
そして、メソッドがどのようにアクションになるかについてのさらなる参照については this linkを参照してください。しかし非常に良い参考資料。
1つのページに2つの異なるバージョンの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>
Ajax CallでC#Methodを押す必要がある場合は、リクエストが取得された場合に2つの案件タイプとURLを渡すだけで、URLを指定するだけで済みます。下記のコードに従ってください。
C#コード:
[HttpGet]
public ActionResult FirstAjax()
{
return Json("chamara", JsonRequestBehavior.AllowGet);
}
リクエストを取得する場合のJavaスクリプトコード
$.ajax({
url: 'home/FirstAjax',
success: function(responce){ alert(responce.data)},
error: function(responce){ alert(responce.data)}
});
ポストリクエストと[HttpGet]を[HttpPost]にした場合のJavaスクリプトコード
$.ajax({
url: 'home/FirstAjax',
type:'POST',
success: function(responce){ alert(responce)},
error: function(responce){ alert(responce)}
});
注:あなたのView Controllerと同じコントローラにFirstAjaxを使用している場合は、URLにController名は必要ありません。 url: 'FirstAjax',
のように
見る
$.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);
}
Global.asaxに "JsonValueProviderFactory"を追加します。
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
}
url: serviceURL,
の代わりに使う
url: '<%= serviceURL%>',
そして、あなたはsuccessFuncに2つのパラメータを渡していますか?
function successFunc(data)
{
alert(data);
}