摘要
在angularjs发送post请求的时候,确实很困惑,在传递json数据的时候,总会遇到在服务端无法接受到参数的情况,这里有必要与$.post进行比较学习一下。
一个例子
这里模拟登录的一个场景,post用户名与密码,服务端接受账户并直接返回到客户端不做其它业务处理。
使用angularjs版本
服务端
</span><span style="color: #008000;">//</span><span style="color: #008000;"> GET: /<controller>/</span>
<span style="color: #0000ff;">public</span><span style="color: #000000;"> IActionResult Login()
{
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> View();
}
[HttpPost]
</span><span style="color: #0000ff;">public</span> IActionResult Login(<span style="color: #0000ff;">string</span> userName,<span style="color: #0000ff;">string</span><span style="color: #000000;"> userPwd)
{
</span><span style="color: #0000ff;">var</span> resut =<span style="color: #000000;"> Request.Form;
</span><span style="color: #0000ff;">return</span> Json(<span style="color: #0000ff;">new</span> { _code = <span style="color: #800080;">200</span>,_msg = <span style="color: #800000;">"</span><span style="color: #800000;">Login success</span><span style="color: #800000;">"</span>,name = userName,password =<span style="color: #000000;"> userPwd });
}
}</span></pre>
$.post
首先使用$.post的方式,直接提交账户密码
$.post(~/Account/Login,{ userName: ,userPwd:
响应
这里我们看一下请求体
那么我们现在看看angularjs的$http.post的情况,到底区别在哪儿?
Meta
IT怪O 用户登录
console.log(data);
});
};
<span style="color: #0000ff;"><<span style="color: #800000;">body<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">div <span style="color: #ff0000;">ng-controller<span style="color: #0000ff;">="LoginController"<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">input <span style="color: #ff0000;">type<span style="color: #0000ff;">="text"<span style="color: #ff0000;"> placeholder<span style="color: #0000ff;">="用户名"<span style="color: #ff0000;"> ng-model<span style="color: #0000ff;">="userName"<span style="color: #ff0000;"> value<span style="color: #0000ff;">="" <span style="color: #0000ff;">/>
<span style="color: #0000ff;"><<span style="color: #800000;">input <span style="color: #ff0000;">type<span style="color: #0000ff;">="password"<span style="color: #ff0000;"> placeholder<span style="color: #0000ff;">="密码"<span style="color: #ff0000;"> ng-model<span style="color: #0000ff;">="userPwd"<span style="color: #ff0000;"> value<span style="color: #0000ff;">="" <span style="color: #0000ff;">/>
<span style="color: #0000ff;"><<span style="color: #800000;">button <span style="color: #ff0000;">ng-click<span style="color: #0000ff;">="Login()"<span style="color: #0000ff;">>登录<span style="color: #0000ff;"></<span style="color: #800000;">button<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">div<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">body<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">html<span style="color: #0000ff;">>
</span><span style="background-color: #f5f5f5; color: #0000ff;">var</span><span style="background-color: #f5f5f5; color: #000000;"> config </span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;"> {
headers: { </span><span style="background-color: #f5f5f5; color: #000000;">'</span><span style="background-color: #f5f5f5; color: #000000;">Content-Type</span><span style="background-color: #f5f5f5; color: #000000;">'</span><span style="background-color: #f5f5f5; color: #000000;">: </span><span style="background-color: #f5f5f5; color: #000000;">'</span><span style="background-color: #f5f5f5; color: #000000;">application/x-www-form-urlencoded</span><span style="background-color: #f5f5f5; color: #000000;">'</span><span style="background-color: #f5f5f5; color: #000000;"> },</span><span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;">transformRequest: function (obj) {</span>
<span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;"> var str = [];</span>
<span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;"> for (var p in obj) {</span>
<span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;"> str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));</span>
<span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;"> }</span>
<span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;"> return str.join("&");</span>
<span style="background-color: #f5f5f5; color: #008000;">//</span><span style="background-color: #f5f5f5; color: #008000;">}</span>
<span style="background-color: #f5f5f5; color: #000000;"> };
console.log(data);
$http.post(
console.log(data);
});
};
});
</span><span style="color: #0000ff;"></</span><span style="color: #800000;">script</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"></
<span style="color: #800000;">head<span style="color: #0000ff;">><span style="color: #0000ff;"><<span style="color: #800000;">body<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">div <span style="color: #ff0000;">ng-controller<span style="color: #0000ff;">="LoginController"<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">input <span style="color: #ff0000;">type<span style="color: #0000ff;">="text"<span style="color: #ff0000;"> placeholder<span style="color: #0000ff;">="用户名"<span style="color: #ff0000;"> ng-model<span style="color: #0000ff;">="userName"<span style="color: #ff0000;"> value<span style="color: #0000ff;">="" <span style="color: #0000ff;">/>
<span style="color: #0000ff;"><<span style="color: #800000;">input <span style="color: #ff0000;">type<span style="color: #0000ff;">="password"<span style="color: #ff0000;"> placeholder<span style="color: #0000ff;">="密码"<span style="color: #ff0000;"> ng-model<span style="color: #0000ff;">="userPwd"<span style="color: #ff0000;"> value<span style="color: #0000ff;">="" <span style="color: #0000ff;">/>
<span style="color: #0000ff;"><<span style="color: #800000;">button <span style="color: #ff0000;">ng-click<span style="color: #0000ff;">="Login()"<span style="color: #0000ff;">>登录<span style="color: #0000ff;"></<span style="color: #800000;">button<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">div<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">body<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">html<span style="color: #0000ff;">>
出现了,处于习惯的原因,平时就会这样来写$http.post的。但结果并不是想要的。那么咱们与$.post对比一下请求体。
看到没?差别就在这里。
发现问题了,那么我们就要转化为$.post提交参数的方式。幸好,angularjs中$http.post提供了一个转化参数的transformRequest方法,可以在config中加上该参数:
它的作用就是将提交的参数转化为$.post提交参数的方式。这样看到的请求体中参数就与$.post相同了。
可以在全局进行设置