我有一个AngularJS,JS,JQ,HTML5,CSS3网络应用程序。它可以将不同的HTTP方法发送到我们项目的REST API并对其进行操作。它与DHC by Restlet (formerly Dev HTTP Client)具有相似的行为。每个请求都返回一个状态代码,如200,201,404,500等,然后显示给用户。
现在我想要的不仅是显示响应代码,还要显示它的描述:
404 Not Found
,201 Created
等。
我收到了Angular的回复:
$http(config).success(function (data, status, headers, config) {//some logic}
有没有人知道使用AngularJS是否可行?
答案 0 :(得分:8)
好吧,我最终得到了以下解决方案:
我创建了一个常量变量并列出了所有HTTP代码及其描述(您可以将它们复制到您自己的程序中):
constants.js:
var HTTP_STATUS_CODES = {
'CODE_200' : 'OK',
'CODE_201' : 'Created',
'CODE_202' : 'Accepted',
'CODE_203' : 'Non-Authoritative Information',
'CODE_204' : 'No Content',
'CODE_205' : 'Reset Content',
'CODE_206' : 'Partial Content',
'CODE_300' : 'Multiple Choices',
'CODE_301' : 'Moved Permanently',
'CODE_302' : 'Found',
'CODE_303' : 'See Other',
'CODE_304' : 'Not Modified',
'CODE_305' : 'Use Proxy',
'CODE_307' : 'Temporary Redirect',
'CODE_400' : 'Bad Request',
'CODE_401' : 'Unauthorized',
'CODE_402' : 'Payment Required',
'CODE_403' : 'Forbidden',
'CODE_404' : 'Not Found',
'CODE_405' : 'Method Not Allowed',
'CODE_406' : 'Not Acceptable',
'CODE_407' : 'Proxy Authentication Required',
'CODE_408' : 'Request Timeout',
'CODE_409' : 'Conflict',
'CODE_410' : 'Gone',
'CODE_411' : 'Length Required',
'CODE_412' : 'Precondition Failed',
'CODE_413' : 'Request Entity Too Large',
'CODE_414' : 'Request-URI Too Long',
'CODE_415' : 'Unsupported Media Type',
'CODE_416' : 'Requested Range Not Satisfiable',
'CODE_417' : 'Expectation Failed',
'CODE_500' : 'Internal Server Error',
'CODE_501' : 'Not Implemented',
'CODE_502' : 'Bad Gateway',
'CODE_503' : 'Service Unavailable',
'CODE_504' : 'Gateway Timeout',
'CODE_505' : 'HTTP Version Not Supported'
};
然后在我的AngularJS控制器中,当我从$http
收到状态时,我只需调用此函数,该函数将状态代码消息的值设置为模型:
setResponseCodeDescr = function(responseCode) {
var responseCodeConstant = 'CODE_'.concat(responseCode);
if (HTTP_STATUS_CODES[responseCodeConstant]){
$rootScope.response.description = HTTP_STATUS_CODES[responseCodeConstant];
} else {
$rootScope.response.description = "";
}
}
全部:)
答案 1 :(得分:2)
使用Angular进行调用时,您将获得状态代码,并在成功函数中显示status
变量。 Angular似乎没有按照我所看到的任何方式将文本归还给你。
您可以使用switch语句来显示与代码一起使用的消息,但显然可以是所有可能代码的长switch语句。您还可以将要显示的消息作为数据的一部分返回,这只不过是将工作放在后端而不是前端。
就从代码到消息的转换而言,我建议将其放在指令(或过滤器)中,并在您的应用程序中重复使用它来获取代码并返回消息以便在UI中显示。
答案 2 :(得分:1)
我按照" amenoire / Jason C"的建议,但常量
var HTTP_STATUS_CODES = {
'200' : 'OK',
'201' : 'Created'
...
'505' : 'HTTP Version Not Supported'
};
写的没有前缀" CODE _"并将其称为
var s = HTTP_STATUS_CODES[xmlhttp.status]
if (!(s && s.length > 0)) s = 'look at https://developer.mozilla.org/en-US/docs/Web/HTTP/Status'
答案 3 :(得分:0)
如果我没错,您仍然可以使用jQuery ajax进行通话,并使用$ .ajaxSetup设置您的响应:
$.ajaxSetup({
type: "GET",
dataType: "jsonp",
error: function(xhr, exception){
if( xhr.status === 0)
alert('Error : ' + xhr.status + 'You are not connected.');
else if( xhr.status == "201")
alert('Error : ' + xhr.status + '\nServer error.');
else if( xhr.status == "404")
alert('Error : ' + xhr.status + '\nPage note found');
else if( xhr.status == "500")
alert('Internal Server Error [500].');
else if (exception === 'parsererror')
alert('Error : ' + xhr.status + '\nImpossible to parse result.');
else if (exception === 'timeout')
alert('Error : ' + xhr.status + '\nRequest timeout.');
else
alert('Error .\n' + xhr.responseText);
}
});
答案 4 :(得分:0)
从技术上获取代码似乎很简单,只需附加响应的内置属性即可获得描述"。
实际上,在文档中对此进行了解释,一旦您获得了响应及其属性,您就可以对其进行任何操作。另一种方式是创建一个CONSTANT,但我认为我们通常不需要这么多。
$http({
method: 'GET',
url: '/someUrl'
}).then(function successCallback(response) {
var status = response.status;
console.log(status); // gives the status 200/401
var statusText = response. statusText;
console.log(status); // HTTP status text of the response
}, function errorCallback(response) {
});