117

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」を出力するだけです。アラートは発生していません。

アップデート

コントローラーを次のように変更したところ、動作し始めました。なぜ今それが機能しているのか明確な考えはありません。誰か説明してください。パラメータ「a」は関連していません。同じメソッド名とパラメータを持つ2つのメソッドを追加できないため、追加しました。これは解決策ではないかもしれませんが、機能していると思います

public class AjaxTestController : Controller
    {
        //
        // GET: /AjaxTest/
        [HttpGet]
        public ActionResult FirstAjax()
        {
            return View();
        }

        [HttpPost]
        public ActionResult FirstAjax(string a)
        {
            return Json("chamara", JsonRequestBehavior.AllowGet);
        }
    }
4

9 に答える 9

55

サーバーにとって何もないので、データ属性を削除し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
});
于 2013-04-24T07:40:49.157 に答える
25

あなたが行った更新の後、

  1. 最初にデフォルトの HttpGet リクエストで FirstAjax アクションを呼び出し、空白の Html ビューをレンダリングします。(以前はそれを持っていませんでした)
  2. 後でそのビューのDOM要素をロードすると、Ajax呼び出しが起動され、アラートが表示されます。

以前は、HTML をレンダリングせずに JSON のみをブラウザに返していました。これで、JSON データを取得できる HTML ビューがレンダリングされました。

JSON を HTML ではなくプレーン データとして直接レンダリングすることはできません。

于 2013-04-25T06:12:55.883 に答える
19

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'); }
});
于 2016-06-27T06:50:03.837 に答える
9

Ajax Call で C# メソッドをオンにする必要がある場合は、リクエストが get の場合に 2 つの問題の種類と URL を渡すだけで、URL のみを指定するだけで済みます。以下のコードに従ってください。正常に動作しています。

C# コード:

    [HttpGet]
    public ActionResult FirstAjax()
    {
        return Json("chamara", JsonRequestBehavior.AllowGet);
    }   

Get リクエストの場合の Java Script コード

    $.ajax({
        url: 'home/FirstAjax',
        success: function(responce){ alert(responce.data)},
        error: function(responce){ alert(responce.data)}
    });

Post Request と [HttpGet] to [HttpPost] の場合の Java Script コード

        $.ajax({
            url: 'home/FirstAjax',
            type:'POST',
            success: function(responce){ alert(responce)},
            error: function(responce){ alert(responce)}
        });

注:View Controllerと同じコントローラーでFirstAjaxを使用する場合、URLにコントローラー名は必要ありません。お気に入りurl: 'FirstAjax',

于 2016-12-22T09:34:14.577 に答える
5

まず、1 つのページに 2 つの異なるバージョンの jquery ライブラリを含める必要はありません。「1.9.1」または「2.0.0」のいずれかで、ajax 呼び出しを機能させることができます。

コントローラーコードは次のとおりです。

    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>
于 2016-05-06T08:15:43.327 に答える
4

それはあなたの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();
}

メソッドがアクションになる方法の詳細については、このリンクを参照してください。非常に良い参考書ですが。

于 2013-04-25T09:34:51.417 に答える
1

意見;

 $.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);
 }
于 2016-12-22T06:01:21.767 に答える
0

url: serviceURL, 使用する代わりに

url: '<%= serviceURL%>',

そして、successFunc に 2 つのパラメーターを渡していますか?

function successFunc(data)
 {
   alert(data);
 }
于 2013-04-24T07:41:17.060 に答える