angular js中 http.get方法怎么用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了angular js中 http.get方法怎么用相关的知识,希望对你有一定的参考价值。
我们可以使用内置的$http服务直接同外部进行通信。$http服务只是简单的封装了浏览器原生的XMLHttpRequest对象。1、链式调用
$http服务是只能接受一个参数的函数,这个参数是一个对象,包含了用来生成HTTP请求的
配置内容。这个函数返回一个promise对象,具有success和error两个方法。
$http(
url:'data.json',
method:'GET'
).success(function(data,header,config,status)
//响应成功
).error(function(data,header,config,status)
//处理响应失败
);
2、返回一个promise对象
var promise=$http(
method:'GET',
url:"data.json"
);
由于$http方法返回一个promise对象,我们可以在响应返回时用then方法来处理回调。如果
使用then方法,会得到一个特殊的参数,它代表了相应对象的成功或失败信息,还可以接受两个
可选的函数作为参数。或者可以使用success和error回调代替。
promise.then(function(resp)
//resp是一个响应对象
,function(resp)
//带有错误信息的resp
);
或者这样:
promise.success(function(data,status,config,headers)
//处理成功的响应
);
promise.error(function(data,status,hedaers,config)
//处理失败后的响应
);
then()方法与其他两种方法的主要区别是,它会接收到完整的响应对象,而success()和error()则会对响应对
象进行析构。
3、快捷的get请求
①$http.get('/api/users.json');
get()方法返回HttpPromise对象。
还可以发送比如:delete/head/jsonp/post/put 函数内可接受参数具体参照148页
②以再发送jsonp请求举例说明: 为了发送JSONP请求,其中url必须包含JSON_CALLBACK字样。
jsonp(url,config) 其中config是可选的
var promise=$http.jsonp("/api/users.json?callback=JSON_CALLBACK");
4、也可以将$http当做函数来使用,这时需要传入一个设置对象,用来说明如何构造XHR对象。
$http(
method:'GET',
url:'/api/users.json',
params:
'username':'tan'
);
其中设置对象可以包含以下主要的键:
①method
可以是:GET/DELETE/HEAD/JSONP/POST/PUT
②url:绝对的或者相对的请求目标
③params(字符串map或者对象)
这个键的值是一个字符串map或对象,会被转换成查询字符串追加在URL后面。如果值不是字符串,会被JSON序列化。
比如这个:
//参数会转为?name=ari的形式
$http(
params:'name':'ari'
);
④data(字符串或者对象)
这个对象中包含了将会被当作消息体发送给服务器的数据。通常在发送POST请求时使用。
从AngularJS 1.3开始,它还可以在POST请求里发送二进制数据。要发送一个blob对象,你可以简单地通过使用data参数来传递它。
例如:
var blob=new Blob(['Hello world'],type:'text/plain');
$http(
method:'POST',
url:'/',
data:blob
);
4、响应对象
AngularJS传递给then()方法的响应对象包含了四个属性。
◇data
这个数据代表转换过后的响应体(如果定义了转换的话)
◇status
响应的HTTP状态码
◇headers
这个函数是头信息的getter函数,可以接受一个参数,用来获取对应名字值
例如,用如下代码获取X-Auth-ID的值:
$http(
method: 'GET',
url: '/api/users.json'
).then (resp)
// 读取X-Auth-ID
resp.headers('X-Auth-ID');
);
◇config
这个对象是用来生成原始请求的完整设置对象。
◇statusText(字符串)
这个字符串是响应的HTTP状态文本。
5、缓存HTTP请求
默认情况下,$http服务不会对请求进行本地缓存。在发送单独的请求时,我们可以通过向$http请求传入一个布尔值或者一个缓存实例来启用缓存。
$http.get('/api/users.json', cache: true )
.success(function(data) )
.error(function(data) );
第一次发送请求时,$http服务会向/api/users.json发送一个GET请求。第二次发送同一个GET请求时,$http服务会从缓存中取回请求的结果,而不会真的发送一个HTTP GET请求。
在这个例子里,由于设置了启用缓存,AngularJS默认会使用$cacheFactory,这个服务是AngularJS在启动时自动创建的。
如果想要对AngularJS使用的缓存进行更多的自定义控制,可以向请求传入一个自定义的缓存实例代替true。 参考技术A
我们可以使用内置的$http服务直接同外部进行通信。$http服务只是简单的封装了浏览器原生的XMLHttpRequest对象。
$http服务是只能接受一个参数的函数,这个参数是一个对象,包含了用来生成HTTP请求的
配置内容。这个函数返回一个promise对象,具有success和error两个方法。
具体如下:
1、简介
编程是编写程序的中文简称,就是让计算机代为解决某个问题,对某个计算体系规定一定的运算方式,是计算体系按照该计算方式运行,并最终得到相应结果的过程。
为了使计算机能够理解人的意图,人类就必须将需解决的问题的思路、方法和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。这种人和计算体系之间交流的过程就是编程。
2、汇编程序
汇编程序。使用汇编语言编写计算机程序,程序员仍然需要十分熟悉计算机系统的硬件结构,所以从程序设计本身上来看仍然是低效率的、繁琐的。但正是由于汇编语言与计算机硬件系统关系密切,在某些特定的场合,如对时空效率要求很高的系统核心程序以及实时控制程序等,迄今为止汇编语言仍然是十分有效的程序设计工具。
3、执行原理
计算机对除机器语言以外的源程序不能直接识别、理解和执行,都必须通过某种方式转换为计算机能够直接执行的。这种将高级编程硬件程序设计语言编写的源程序转换到机器目标程序的方式有两种:解释方式和编译方式。
Django:如何在 Jquery 中使用 $getJSON 或在 Angular.js 中使用 $http.get 接收 QuerySet?
【中文标题】Django:如何在 Jquery 中使用 $getJSON 或在 Angular.js 中使用 $http.get 接收 QuerySet?【英文标题】:Django: How to receive QuerySet with $getJSON in Jquery or $http.get in Angular.js? 【发布时间】:2013-11-06 14:01:42 【问题描述】:在 ASP.NET MVC 或 ASP.NET Web Api 中,如果我的 C# 代码如下所示,我可以在 jQuery 或 Angular.js 中接收数据列表:
return Json(list, JsonRequestBehavior.AllowGet);
我是 Django 的新手,所以如果我想在首页接收列表,我不知道如何在后端编写。
jQuery:
$.getJSON(url, function (list)
result=list
;
或
Angular.js:
$http.get(url).success(function(list)
result=list
;
我的模特
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
假设数据库中有两个轮询, 我在views.py中尝试了3种情况。
list = Poll.objects.all()
1.return HttpResponse(list)
我在 jQuery 回调或 Angular 回调中得到的将是 "Poll objectPoll object"。
2.return HttpResponse(list.values())
我会得到 SyntaxError: " Unexpected token ' "
3.return HttpResponse(list.values_list())
我会得到一个字符串(它似乎也不在 json 中):
"(1, u'Which city is the most beautiful all over the world?', datetime.datetime(2013, 10, 19, 7, 8, tzinfo=<UTC>))(2, u'What is your favourite city?', datetime.datetime(2013, 10, 19, 7, 8, 43, tzinfo=<UTC>))"
但是在 ASP.NET MVC 或 ASP.NET Web Api 中,即使我在后端(C#)中返回 json 列表,我总是在我的 js 回调中得到反序列化列表,所以我可以直接使用它。
我是否使用了错误的 QuerySet API 或错误的 List Type?
提前致谢。
当我尝试一些答案时编辑以添加信息:
感谢您提供详细的答案,但如果我使用 @ 987654332@
然后我将代码更改为 return HttpResponse(json.dumps(Poll.objects.values(), cls=DjangoJSONEncoder))
但我得到的是 "['pub_date': datetime.datetime(2013, 10, 19, 7, 8, tzinfo=) , 'question': u'世界上哪个城市最美?', u'id': 1, 'pub_date': datetime.datetime(2013, 10, 19, 7, 8, 43, tzinfo =), 'question': u'What is your 最喜爱的 city?', u'id': 2] is not JSON serializable"。
google了之后,我把代码改成了return HttpResponse(serializers.serialize('json', Poll.objects.all()))
这次js回调没有错误,但是接收到的数据结构如下:
Array[2]
0: Object
fileds: Object
pub_date:...
question:...
model: "polls.poll"
pk: 1
1: Object
fileds: Object
pub_date:...
question:...
model: "polls.poll"
pk: 2
如果我想得到应该怎么做:
Array[2]
0: Object
id: 1
question:...
pub_date:...
1: Object
id: 2
question:...
pub_date:...
【问题讨论】:
【参考方案1】:在 Python/Django 中你会做的稍有不同。
现在,对于查询集,.values()
具有不同的含义。 You can read about it here
返回 ValuesQuerySet — 一个 QuerySet 子类,当用作可迭代对象而不是模型实例对象时返回字典。
要实现你想要的,你需要python提供的json
module。
在模型Poll
:
class Poll(models.Model):
#attributes
def to_json(self):
return 'field1': 'attribute1', ... #if you want a subset of all the attributes
在视图中:
polls = Poll.objects.all()
return HttpResponse(json.dumps([poll.to_json() for poll in polls ]))
现在,如果你想要所有属性,你可以这样做:
polls = Poll.objects.all()
return HttpResponse(json.dumps([poll.__dict__ for poll in polls ]))
另外,不要使用list
作为局部变量名,因为它与构建类型冲突。
【讨论】:
我根据您的回答编辑了原始问题,请看一下。 :) 为什么要采用这种特定格式?只要能解析正确的json,何必担心呢? 你的意思是我在js回调中收到的数据结构?因为如果将js代码迁移到其他背景(例如ASP.NET MVC),我不想更改js回调中的代码,所以我想使用从后端返回的具有正常模型结构的数据列表。最后,我将返回代码更改为 return HttpResponse(json.dumps(list(poll_list.values()), cls=DjangoJSONEncoder)) 并得到了想要的结果。【参考方案2】:import json
return HttpResponse(json.dumps(Poll.objects.all()),
content_type="application/json")
以上使用json
序列化您的查询集。我不确定是否有一些模型字段在被序列化时可能会阻塞,所以你可能想看看 django serializer 中的 bulit
如果您有许多 API 端点,我建议您查看 django-rest-framework
【讨论】:
是的,不能序列化 DateTimeField。我编辑了原始问题,请看一下。顺便说一句,这只是我学习Django的一个示例项目,所以我不想使用django-rest-framework之类的其他框架。 :) 我会说不使用 django-rest-framework 将是一个巨大的错误。无异于说,我想跑得快,却不想用***,也不想用机翼,也不想用引擎。以上是关于angular js中 http.get方法怎么用的主要内容,如果未能解决你的问题,请参考以下文章
Django:如何在 Jquery 中使用 $getJSON 或在 Angular.js 中使用 $http.get 接收 QuerySet?
使用来自 API 的 $http.get 进行 Angular.js 本地开发