我正在尝试使用AngularJS发送带有“POST”方法的表单。我使用$ http发送它,但它总是返回“无法POST”和404错误。路线是正确的,只有当我通过Grunt执行我的应用程序时才会发生(通过“GET”发送完美)。该应用程序是使用Yeoman构建的。
我认为它必须是一个愚蠢的问题,但我无法使其发挥作用。
观点:
<form name="formLogin" ng-submit="login()">
<ul>
<li>
<label for="user">User</label>
<input type="text" id="user" name="user" ng-model="user">
</li>
<li>
<label for="pass">Password</label>
<input type="password" id="pass" name="pass" ng-model="pass">
</li>
</ul>
<input type="submit" value="Send">
控制器:
'use strict';
angular.module('myApp')
.controller('LoginCtrl', function ($scope, $http, $resource) {
$scope.login = function() {
var config = {
url: 'php/login.php',
method: 'POST',
data: {
user: $scope.user,
pass: $scope.pass
}
}; // configuration object
$http(config)
.success(function(data, status, headers, config) {
console.log('success');
if (data.status) {
// succefull login
} else {
// Wrong login
}
})
.error(function(data, status, headers, config) {
console.log('error');
});
};
});
我使用Grunt:
grunt server
为什么会这样?
谢谢!
答案 0 :(得分:2)
我很困惑为什么GET
在这种情况下应该起作用。 Grunt服务器只提供app
和.tmp
目录中的静态文件,您对.php
文件的引用是相对的。因此,对于标准设置,对php/login.php
的AJAX请求只会返回app/php/login.php
中文件的纯PHP源代码,这肯定不是您想要的。
您可能希望将后端与前端分开,并将PHP应用程序放在其他位置。这可能位于不同的位置(例如/api/login.php
)或不同的主机https://api.example.com/login.php
。将Yeoman应用程序与API混合使用并不是一个好主意。
但是,如果您被迫将它们保留在一个项目中,则可以使用grunt-php从Gruntfile启动本地PHP服务器。
答案 1 :(得分:0)
默认情况下,Angular将http发布请求发送为application/json
,而不是application/x-www-form-urlencoded
,这可能会导致问题。将您的申请更改为接受application/json
或将application/json
替换为application/x-www-form-urlencoded
中的$httpProvider.defaults.headers.post
并自行序列化。设置HTTP标头部分中的More details in Angular.js doc。