在angularjs中我们最好不要使用jquery提供的ajax函数去提交数据
angularjs已经为我们提供了一个$http的方式 去提交http请求
今天主要讲下如何使用$http post数据
先给出一个 简单的例子
$http({
url: $scope.url,
method: "POST",
data: { 'message' : "message" }
})
通过debug模式 你可以看到
对比下利用$.ajax post数据的时候
这时候我们就知道了需要 改变 request header里面的content-type属性 让他以form表单的方式编码提交数据
那么代码如下
$http({
<span style="white-space:pre"> </span> url: $scope.url,
<span style="white-space:pre"> </span> method: "POST",
<span style="white-space:pre"> </span> headers: {'Content-Type': 'application/x-www-form-urlencoded'},
<span style="white-space:pre"> </span> data: { 'message' : "message" ,
<span style="white-space:pre"> </span> id:1}
})
但是这个时候 你肯定也会发现 form data是
{"message":"message","id":1}
这是因为我们的参数没有序列化,这个时候导入jquery的$.param(data)函数去序列化就行了
<pre name="code" class="javascript">$.param({ 'message' : "message", id:1 })
<span style="color: rgb(34, 34, 34); font-family: Consolas, 'Lucida Console', monospace; font-size: 12px; white-space: pre-wrap; background-color: rgb(255, 255, 255);">"</span><span class="console-formatted-string source-code" style="box-sizing: border-box; color: rgb(196, 26, 22); white-space: pre-wrap; font-family: Consolas, 'Lucida Console', monospace; font-size: 12px; background-color: rgb(255, 255, 255);">message=message&id=1</span><span style="color: rgb(34, 34, 34); font-family: Consolas, 'Lucida Console', monospace; font-size: 12px; white-space: pre-wrap; background-color: rgb(255, 255, 255);">"</span>
所以我们将能够得到一个完整的方式
$http({
<span style="white-space:pre"> </span>url: $scope.url,
<span style="white-space:pre"> </span>method: "POST",
<span style="white-space:pre"> </span>headers: {'Content-Type': 'application/x-www-form-urlencoded'},
data: $.param({ 'message' : "message" ,id:1})
})
如果你的message是个json的object的话 可以使用如下方式
$http({
url: $scope.url,
method: "POST",
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
data: $.param({ 'message' :JSON.stringify(message) ,id:1})
})