利用Ajax調用controller方法並傳遞參數


 
         

一、背景
由於近期工作需要將人臉識別功能與選課系統結合,但是對前端知識了解的很少,只能邊做邊學了,因此在這邊把遇到的一些坑說明一下,希望能幫助到像我一樣的初學者

 
         

二、具體內容
這里采用框架為MVC,如果想在頁面中不通過提交表單方式與控制器交互的話,可以用ajax去調用控制器方法並傳遞參數以及處理返回的json數據,方法如下

 
         

頁面代碼:

 $.ajax(
    {
           url: '/User/facelog',     // 請求地址, 就是你的控制器, 如 test.com/home/index/index
           data: JSON.stringify({ stuID: stuID2 }),   // 需要傳送的參數
           type: 'POST',   // 請求方式
           dataType: 'json', // 返回數據的格式, 通常為JSON
           contentType: 'application/json',             
           success: function (result) {
               window.location.href = result.NextUrl;
               msg = result.Msg;
               console.log(result); // 請求成功后的回調函數, result 為響應內容
           },
           error: function () {
               console.log('Send Request Fail..'); // 請求失敗時的回調函數
           }
       }
   );
 [HttpPost]
 public JsonResult facelog(string  stuID)
    {
       User user = this.UserService.Select((User T) => (T.UserName == stuID) && T.Status == 0);
        if (user != null)
        {
            base.Session["UserInfo"] = user;
            AjaxMsg ajaxMsg = new AjaxMsg()
            {
                Statu = "ok",
                Msg = "登陸成功,正在跳轉頁面...",
                NextUrl = "/User/Main"
            };
            return base.Json(ajaxMsg);
        }
        return base.Json(new { Statu = "error", Msg = "賬號或密碼錯誤!"});
    }   

這里有幾個坑需要特別說明一下:

在URL填寫中為‘/控制器/方法名’這里一定要注意,控制器指的並不是控制器全名,而是去掉controller的那個,這里我的控制器為UserController,因此這里填寫User,話說我踩到這個坑,害我調試了好久。。。

就是傳遞參數格式了,data這里傳遞的參數是動態的,因此就定義了全局變量存儲,這里被坑的地方是stuID2 的值是從另外一個ajax請求中獲得,但另外一個數據還未返回時這個ajax已經執行了,害我一直以為是data填的格式不對才導致數據無法傳遞到控制器中

接第二點,如果想要在一個ajax執行完成后再執行另外一個,這里用 async: false即可,默認情況是為true的

JSON.stringify 要與 contentType: 'application/json' 一起用才能很好的將數據傳遞過去

關於返回數據,一般為json的需要解析一下

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM