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的更多相关文章

  1. angular中的jsonp记录

    angular的正常机制采用引入$http服务的形式进行 get post等的访问.但是在跨域访问的时候就需要采用jsonp了. 不废话,直接上示例和引用原文地址: 比如访问地址为 http://ur ...

  2. 使用Cors在WebApi中实现跨域请求,请求方式为angular的 $http.jsonp

    使用Cors在WebApi中实现跨域请求 第一步,在webapi项目中安装cors 在Web API配置文件中(Global.asax)进行全局配置: public class WebApiAppli ...

  3. Angular 中的数据交互(get jsonp post)

    一.Angular get 请求数据 Angular5.x 以后 get.post 和和服务器交互使用的是 HttpClientModule 模块. 1.在 app.module.ts 中引入 并注入 ...

  4. Angular中ngCookies模块介绍

    1.Cookie介绍 Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie.内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短 ...

  5. angular 中父元素ng-repeat后子元素ng-click失效

    在angular中使用ng-repeat后ng-click失效,今天在这个上面踩坑了.特此记录一下. 因为ng-repeat创造了新的SCOPE.如果要使用这个scope的话就必须使用$parent来 ...

  6. angular中的compile和link函数

    angular中的compile和link函数 前言 这篇文章,我们将通过一个实例来了解 Angular 的 directives (指令)是如何处理的.Angular 是如何在 HTML 中找到这些 ...

  7. Deferred在jQuery和Angular中的使用与简单实现

    Deferred在jQuery和Angular中的使用与简单实现 Deferred是在jQuery1.5版本中加入的,并且jQuery使用它完全重写了AJax,以前也只是偶尔使用.但是上次在使用Ang ...

  8. angular源码分析:angular中脏活累活的承担者之$interpolate

    一.首先抛出两个问题 问题一:在angular中我们绑定数据最基本的方式是用两个大括号将$scope的变量包裹起来,那么如果想将大括号换成其他什么符号,比如换成[{与}],可不可以呢,如果可以在哪里配 ...

  9. angular源码分析:angular中入境检察官$sce

    一.ng-bing-html指令问题 需求:我需要将一个变量$scope.x = '<a href="http://www.cnblogs.com/web2-developer/&qu ...

随机推荐

  1. 微信支付curl出错及错误码解决方案

    1. curl错误码6 出现场景 PHP Fatal error: Uncaught exception 'WxPayException' with message 'curl出错,错误码:6' in ...

  2. 12、(扩展)获取省份表,填充于下拉列表框的简易js

    在制作省份下拉列表时,我们常常会遇到大量省份不停复制粘贴的问题,比如百度到这样一个填充着省份信息的表格: 里面含有很多条数据和内容,这时候要一条一条复制粘贴非常繁冗,所以在同事的启发下我写了一个简易的 ...

  3. 禁用CMFCRibbonApplicationButton的单击和双击事件

    为了禁用CMFCRibbonApplicationButton的单击和双击事件,我重载了CMFCRibbonApplicationButton如下: 1. MyRibbonApplicationBut ...

  4. Linux mint 18版本开启SSH服务

    linux mint 18版本默认是没有安装ssh server的 需要手动安装 安装ssh server: 此命令需要联网,会自动下载安装 安装之后看是否开始了ssh, 看到ssh-agent 和s ...

  5. check_pkg函数解析

    函数位置,conf/core,具体代码如下: check_pkg() { # Usage: check_pkg <command> <package> # It means: ...

  6. oracle行转列,decode 等用法

    DECODE()函数,它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值.函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式.当然,如果未能与任何一个实参序偶匹配成功,则函数也有默 ...

  7. QT显示歌词渐变

    central = new QWidget(this); setCentralWidget(central); central->setAutoFillBackground(true); cen ...

  8. 托管到github上的网页图片在百度浏览器中显示不全

    这几天做了个较完整的网页放到github上,上传后看网页效果. 在Firefox浏览器中,显示正常. 在百度浏览器中,空了一大块位置(图片位置),偏偏只空了这一块,其它地方的图片都好好的. 点击f12 ...

  9. 1password密码库格式更新

    由于国内网络安全做的太差,经常发生被脱裤的事件,比如最近的网易邮箱(via 乌云),所以只好用1password这类密码管理软件,实现一站一密.昨晚半夜冻醒了,刷推刷到了这个:1password-le ...

  10. Oracle 常用修改字段SQL语句

    1. 更新字段名称 alter table table_name rename column column_old to column_new; 2. 添加字段 ); 3. 删除字段 alter ta ...