【发布时间】:2016-02-10 18:42:03
【问题描述】:
当你在 Angular 中使用 $ http.post 提交参数时遇到问题。
我认为这是某种错误本身对 angular 知之甚少,因为在 jquery 中工作正常。
请求 jquery'javascript
var user = $('#usuariotxt').val();
var pass = $('#passwordtxt').val();
var login= {
Usuario : user,
Password : pass
};
$.ajax({
type: 'POST',
url: 'http://190.109.185.138/Apipedro/api/login',
data: login,
datatype: 'json'
}).done(function(data) {
console.log(data);
});
请求 Angular-Javascript
var app;
app = angular.module('AppUPC',[]);
app.controller('Formulario',['$scope', '$http', function ($scope, $http){
$scope.login = function(){
var login = {
Usuario: $scope.usuariotxt,
Password: $scope.passwordtxt
};
console.log(login);
var url, method;
url = 'http://190.109.185.138/Apipedro/api/login';
method = 'POST';
$http.post("http://190.109.185.138/Apipedro/api/login", {},
{params: {Usuario:$scope.usuariotxt, Password:$scope.passwordtxt}
}).success(function (data, status, headers, config) {
$scope.persons = data;
console.log($scope.persons);
}).error(function (data, status, headers, config) {
$scope.status = status;
console.log($scope.status);
});
};
}]);
我也用过很多其他的形式,包括最常见的
$http({
url: url,
method: method,
data: login,
headers :{'Content-Type':'application/json'}
})
我遇到的错误如下
【问题讨论】:
-
您的 API 是否真的期望请求正文中有 JSON 有效负载?您的 jQuery 示例将发送
Usuario=user&Password=pass,而 Angular 版本将发送{"Usuario":"user","Password":"pass"}。听起来您的 API 未设置为处理 CORS 飞行前(即OPTIONS)请求,并且标头Content-Type: application/json使其成为非简单请求,从而触发飞行前请求 -
奇怪的是它适用于 jquery。似乎服务器拒绝了该请求。在任何请求之前,浏览器发送一个选项类型的请求来检查请求方法是否被服务器允许。在这种情况下,服务器以拒绝响应。
-
@Dvir 这一点都不奇怪。 jQuery POST 请求是一个简单请求,因此不会触发飞行前
OPTIONS请求。
标签: javascript jquery angularjs