Angular中的jsonp
1、一般我们使用Angualr中的jsonp值这样使用的:注入$http服务
这样使用jsonp的方式可以支持多数api,但是douban不支持无法使用
module.controller('InTheatersController',['$scope','$http', function($scope,$http){
var doubanApiAddress = 'https://api.douban.com/v2/movie/in_theaters';
/!*在angualr中使用jsonp服务必须在的当前地址后面加
* 一个参数callback(此名不固定)='JSON_CALLBACK',angular会将此替换为一个随机函数名 * *!/
$http.jsonp(doubanApiAddress+'?callback=JSON_CALLBACK').then(function(res){
console.log(res);
if(res.status === 200){
$scope.subjects = res.data.subjects;
}else{
$scope.message = '哎呀,获取数据失败了!'+res.statusText;
}
},function(err){
$scope.message = '哎呀,获取数据失败了2!'+err.statusText;
})
}]);
于是我们要自己写一个jsonp放服务来取代Angular中的jsonp服务
/*
在这个组件中写一个方便跨域的服务,方便其他模块也使用 因为默认angualr提供的异步请求对象不支持自定义函数名
而angular随机分配的回调函数douban不支持
*/ 'use strict';
(function(angular){ var http = angular.module('myApp.services.http',[]); http.service('HttpService',['$window','$document',function($window,$document){ //url:https://api.douban.com/v2/movie/in_theaters放在<script>中再放在html中
this.jsonp = function(url, data, callback){
//1、处理url地址中的回调参数
//2、创建一个script标签
//3、挂载回调函数,放在全局作用域中让回调的时候执行
//4、将script放在html中 var cbFuncName = 'my_json_cb_' + Math.random().toString().replace('.', '');
// 不推荐,我们推荐angular的方式
$window[cbFuncName] = callback;//$window就是window对象 var querystring = url.indexOf('?') == -1 ? '?' : '&';
for (var key in data) {
querystring += key + '=' + data[key] + '&';
} querystring += 'callback=' + cbFuncName; //document对象是$document对象的数组成员
var scriptElement = $document[0].createElement('script');
scriptElement.src = url + querystring;
$document[0].body.appendChild(scriptElement);
}
//$window.$jsonp = jsonp;
}])
})(angular)
这样我们在模块中依赖myApp.services.http,并且注入HttpService服务就可以使用了
Angular中的jsonp的更多相关文章
- angular中的jsonp记录
angular的正常机制采用引入$http服务的形式进行 get post等的访问.但是在跨域访问的时候就需要采用jsonp了. 不废话,直接上示例和引用原文地址: 比如访问地址为 http://ur ...
- 使用Cors在WebApi中实现跨域请求,请求方式为angular的 $http.jsonp
使用Cors在WebApi中实现跨域请求 第一步,在webapi项目中安装cors 在Web API配置文件中(Global.asax)进行全局配置: public class WebApiAppli ...
- Angular 中的数据交互(get jsonp post)
一.Angular get 请求数据 Angular5.x 以后 get.post 和和服务器交互使用的是 HttpClientModule 模块. 1.在 app.module.ts 中引入 并注入 ...
- Angular中ngCookies模块介绍
1.Cookie介绍 Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie.内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短 ...
- angular 中父元素ng-repeat后子元素ng-click失效
在angular中使用ng-repeat后ng-click失效,今天在这个上面踩坑了.特此记录一下. 因为ng-repeat创造了新的SCOPE.如果要使用这个scope的话就必须使用$parent来 ...
- angular中的compile和link函数
angular中的compile和link函数 前言 这篇文章,我们将通过一个实例来了解 Angular 的 directives (指令)是如何处理的.Angular 是如何在 HTML 中找到这些 ...
- Deferred在jQuery和Angular中的使用与简单实现
Deferred在jQuery和Angular中的使用与简单实现 Deferred是在jQuery1.5版本中加入的,并且jQuery使用它完全重写了AJax,以前也只是偶尔使用.但是上次在使用Ang ...
- angular源码分析:angular中脏活累活的承担者之$interpolate
一.首先抛出两个问题 问题一:在angular中我们绑定数据最基本的方式是用两个大括号将$scope的变量包裹起来,那么如果想将大括号换成其他什么符号,比如换成[{与}],可不可以呢,如果可以在哪里配 ...
- angular源码分析:angular中入境检察官$sce
一.ng-bing-html指令问题 需求:我需要将一个变量$scope.x = '<a href="http://www.cnblogs.com/web2-developer/&qu ...
随机推荐
- 使用Mybatis-Generator自动生成Dao、Model、Mapping代码
1.所需jar包 mybatis-generator-core-1.3.2.jar mybatis-generator-core-1.3.2.jar 可以去http://mvnrepository.c ...
- 删除hao123这个恶心的毒瘤
最近做服务器,好好一个东西莫名其妙的被染上了这个狗皮膏药......然后我就用了各种手段删除,注册表.组策略等等都用上了,却没有丝毫办法.....最后发现的地方特别无语,居然在快捷方式的属性中加上了u ...
- Oil Deposits
Oil Deposits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- 【CSS】梯形、平行四边形导航条与毛玻璃效果【转】
转载出处:http://www.cnblogs.com/Uncle-Keith/p/5943158.html 代码部分有小改动. 导航条对于每一个Web前端攻城狮来说并不陌生,但是毛玻璃可能会相对陌生 ...
- JavaScript+HTML,简单的计算器实现
成功进化到程序猿快一年多了, 还没写过计算器, 正好今天比较闲,随手写了个计算器,最简单的实现,核心是eval()方法,把字符串作为JS代码处理,把输入的信息拼接成字符串,点等号执行代码得到结果,出异 ...
- RSA不限长度非对称加密解密C#
RSA 分段加解密[解决“不正确的长度”的异常] RSA 是常用的非对称加密算法.最近使用时却出现了“不正确的长度”的异常,研究发现是由于待加密的数据超长所致. .NET Framework 中提供的 ...
- UE4 Windows平台部署游戏到IOS 第一部分
UE4 Version 4.11.2 or 4.12.2 方法步骤: 1.申请IOS开发者账号,大概三个工作日左右激活. 2.下载iTunes 3.创建项目因为是在Windows平台,根据官方的提示只 ...
- python 使用总结
本人原来是编写java的,后来转到编写ios之后,最后又来编写python了.相对于其他的一些开发人员来说,我精通的语言还是比较杂的. 这里将几个语言进行类比,比较一些个人的看法的东西. 首先obje ...
- DOCTYPE声明的作用是什么?严格模式与混杂模式如何区分?
HTML语言已经存在太久了,目前必然会有一些不同版本的文档存在,为了能够让浏览器清楚你的文档的版本类型和风格,需要在文档的起始用DOCTYPE声明制定当前文档的版本和风格.如果在网页中提供了版本信息, ...
- archlinux vmware一些问题
虚拟机没法上网 sudo modprobe vmnet sudo vmware-network --start