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 ...
随机推荐
- oracle xmltype导入并解析Excel数据 (四)特别说明
1.Excel导出,此处没有给出 2.错误原因在中间表,T_EXCEL_IMPORT_GENERATION,其中errormsg不为空的数据 3,中间表入库过程: 需要自己实现,为一个存储过程,存储过 ...
- js/jquery 回调函数的定义方法
基本写法: 带参数的回调函数 以上回调函数,直接传入function作为参数,同样,还可以传入json对象作为参数...如下. 该方法的优势是可以定义多个回调函数....类似$.ajax回调函数中的s ...
- NYOJY 491 幸运三角形
描述 话说有这么一个图形,只有两种符号组成(‘+’或者‘-’),图形的最上层有n个符号,往下个数依次减一,形成倒置的金字塔形状,除第一层外(第一层为所有可能情况),每层形状都由上层决定,相邻的符号相同 ...
- js 关键字和保留字
不能把关键字.保留字.true.false和null用作标识符. js中的关键字可用于表示控制语句的开始或结束,或者用于执行特定操作等.按照规则,关键字也是语言保留的,不能用作标识符.以下就是ECMA ...
- MySQL的左连接、右连接和全连接的实现
表student:+----+-----------+------+| id | name | age |+----+-----------+------+| 1 | Jim | 18 || 2 | ...
- 点击其它地方DIV隐藏
$(document).bind('click',function(e){ var e = e || window.event; //浏览器兼容性 var elem = e.target || e.s ...
- Loadrunner 脚本错误问题汇总(非原创,部分转自互联网)
在运行脚本回放过程中,有时会出现错误,这在实际测试中是不可避免的,毕竟自动录制生成的脚本难免会有问题,需要运行脚本进行验证,把问题都解决后才加入到场景中进行负载测试.下面结合常用的协议(如Web.We ...
- 关于discuz“终于解决“头像保存过程中发生网络错误,请重试"”的解决方法
1 php.ini里面allow_url_fopen = On2 将php.ini中的;upload_tmp_dir = 该行的注释符,即前面的分号“:”去掉,使该行在php.ini文档中起作用.up ...
- SQLALchemy(连表)、paramiko
本节内容:
- Python 基礎 - 字符轉編碼操作
回顧字符編碼的前世今生 ASCII 只能儲英文或特殊字符,只占一個字節,一個字節8bit,不能儲中文,所以才出現Unicode Unicode 不管是中文或英文,都是占二個字節,一個字節8bit UT ...