使用Angular $ HTTP服务进行简单的POST调用: authService.login = function(用户名,密码){ var credentials ='username ='+ username +'&' +'password ='+密码;
return $http({
method: 'POST',
url: href,
headers: {'accept': acceptValue, 'content-type': contentType},
data: credentials
}).then(onSuccess, onError);
};
无法获取错误状态,而是获得SyntaxError:Unexpected token E. 控制台首先显示状态401,并在解析错误后立即显示。 想知道它在幕后做了什么,它试图解析什么,以及为什么我无法让error.status工作。
答案 0 :(得分:0)
问题可能在于您如何序列化数据。您可以尝试将它们作为对象直接传递到data
,而不是自己构建字符串:
data: {username: username, password: password}
Angular应该自己序列化数据对象中的信息。
如果这不起作用,Angular还有一个内置的替代品,它的默认序列化程序模仿jQuery中的序列化程序。它上面的文档是Ember service。使用此方法的请求类似于:
$http({
url: "/auth/login",
method: "POST",
headers: {"Content-Type": "application/x-www-form-urlencoded"},
data: $httpParamSerializerJQLike({
email: email,
password: password
})
})
如果选择此选项,请不要忘记将$httpParamSerializerJQLike
作为依赖项注入。
答案 1 :(得分:0)
您的请求似乎已正确发送,并且您收到了回复。
我尝试使用RESTful服务返回401
状态代码。这是我的JavaScript代码:
var href = 'https://contactsapi.apispark.net/v1/contacts/';
var acceptValue = 'application/json';
var contentType = 'application/json';
var credentials = {}; //'something';
function onSuccess(data, status, headers, config) {
}
function onError(data, status, headers, config) {
console.log('data = '+JSON.stringify(response, null, 2));
}
$http({
method: 'POST',
url: href,
headers: {'accept': acceptValue, 'content-type': contentType},
data: credentials
}).then(onSuccess, onError);
响应对象在我的例子中包含以下内容:
{
"data": {
"code": 401,
"contactEmail": null,
"description": "The request requires user authentication",
"homeRef": "/",
"reasonPhrase": "Unauthorized",
"uri": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2"
},
"status": 401,
"config": {
"method": "POST",
"transformRequest": [
null
],
"transformResponse": [
null
],
"url": "http://localhost:8182/contacts/",
"headers": {
"accept": "application/json",
"content-type": "application/json"
},
"data": {}
},
"statusText": "Unauthorized"
}
可以帮助您查看响应内容(标头/有效负载)。例如,如果有效负载是JSON,则为Content-Type
标头的值。也许答案的Content-Type
与实际内容之间存在差距。例如,您收到的内容类型为application/json
的纯文本内容。
我做了一个测试来模拟这种情况(内容类型为application/json
的XML内容),我有以下错误:
SyntaxError: Unexpected token <
at Object.parse (native)
at vc (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:15:480)
at Zb (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:82:229)
at https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:83:143
at m (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:7:322)
at dd (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:83:125)
at d (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:84:380)
at https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:119:113
at n.$eval (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:133:221)
at n.$digest (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:130:233)
Angular尝试解析JSON内容,但由于它格式不正确,所以不能并且抛出错误。
它似乎与您的错误类似。所以我认为问题不在你的Angular应用程序中,而是在服务器中......
希望它可以帮到你, 亨利