我刚刚开始构建我的第一个angularjs项目而且我遇到了$ http.post。无论我发送什么数据,它都不会被服务器拦截(Django)。我看过很多帖子说我必须将Content-Type headere更改为:
$http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";
这样做,没有帮助。
当我开始看起来更深入一点,比较$ http和Jquery的$ .post时,我注意到当数据以$ http发送时,这就是发送的表单数据:
{"first_prop":"789564","second_prop":"Foo","third_prop":"Bar"}:
最后用分号。
当我用$ .post发送它(并且它有效)时,这就是发送的内容:
first_prop:789564
second_prop:Foo
third_prop:Bar
所以,他们不会以同样的方式发送信息。
有人知道我在$ http.post做错了吗?
以下是我的代码:
$http.post('pakashnotifier/addSlave', {
first_prop:"789564",
second_prop:"Foo",
third_prop:"Bar"
})
更新 我现在注意到,使用$ http.post,帖子在服务器上被拦截为GET。
如果有人可以提供帮助,那就太棒了:)
答案 0 :(得分:0)
你应该试试这个
$http.post('pakashnotifier/addSlave', {
data : {
first_prop:"789564",
second_prop:"Foo",
third_prop:"Bar"
}
})
如果使用django,似乎可以使用jquery $ param
$http({
method: 'POST',
url: '/url/',
data: $.param({
first_prop:"789564",
second_prop:"Foo",
third_prop:"Bar"
})
})
答案 1 :(得分:0)
首先,$ http中的defualt转换正在使用JSON。您可以在'默认转换'中进行检查。从API文档$http开始,如果需要接受application/x-www-form-urlencoded
格式,则需要根据服务器进行设置。
然后,这是我在Chrome DevTools中找到的表单数据:
{"first_prop":"789564","second_prop":"Foo","third_prop":"Bar"}
我最后还没有得到分号。