AngularJS的JSONP服务
有些页面的response中,包含了 Access-Control-Allow-Origin 这个header,说明可以进行跨域请求,如果没有包含这个header的页面可以利用JSONP进行跨域
script标签中的src属性可以也实现跨域,,下面我们来简单封装利用script标签实现跨域的函数。
步骤:
- 创建script标签
 - script标签的src属性等于url
 
a) url中有回调函数和参数
b) 回调函数需要写入window中
i. 调用的函数名不能为同一个,否则会被覆盖
ii. 所以利用随机数(转换为字符串,然后去掉前两位0和小数点)让函数名不同
c) 参数以对象形式传入,需要遍历,与url进行连接
3. 将标签插入body中
4. 移除script
代码:
function getJsonp(url,params,callback){
        //创建script标签
        var script=document.createElement("script");
     //生成随机的回调函数名
        var name="JSONP"+Math.random().toString().substring(2);
        window[name]=function(data){
            callback(data);
        }
        var strUrl=url+"?callback="+name;
        for(key in params){
            strUrl+="&"+key+"="+params[key]
        }
        script.src=strUrl;
        document.body.appendChild(script);
        document.body.removeChild(script);
    }
了解原理即可,现在有很多插件可以解决这个问题
AngularJS的JSONP服务的更多相关文章
- 【AngularJs】---JSONP跨域访问数据传输
		
大家会自然想到只有一个字母之差的JSON吧~ JSON(JavaScript Object Notation)和JSONP(JSON with Padding)虽然只有一个字母的差别,但其实他们根本不 ...
 - Ⅳ.AngularJS的点点滴滴-- 服务
		
服务(Angularjs很多方法都是服务组成的) 1.使用service方法创建的单例服务 <html> <script src="http://ajax.googleap ...
 - 【AngularJs】---JSONP跨域访问数据传输(JSON_CALLBACK)
		
大家会自然想到只有一个字母之差的JSON吧~ JSON(JavaScript Object Notation)和JSONP(JSON with Padding)虽然只有一个字母的差别,但其实他们根本不 ...
 - angularJS(三):服务(Service)、http
		
一.服务 服务是一个函数或对象,可在你的 AngularJS 应用中使用. 可以创建自己的服务,或使用内建服务 $location 注意 $location 服务是作为一个参数传递到 controll ...
 - AngularJs之六(服务)
		
服务:AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用.AngularJS 内建了30 多个服务. 最常用的服务:$location 服务, $http 服务 ...
 - 让AngularJS的$http 服务像jQuery.ajax()一样工作
		
让AngularJS的$http 服务像jQuery.ajax()一样工作 $http的post . 请求默认的content-Type=application/json . 提交的是json对象的字 ...
 - 怎么理解angularjs中的服务?
		
AngularJS中的服务其实就是提供一种方式抽取共用类库 比如说一些工具类方法,我们传统的做法就是自己写个 utility 类,把相关的工具方法填充到utility里面去,最后把utility类放到 ...
 - AngularJS之使用服务封装
		
AngularJS之使用服务封装可复用代码 创建服务组件 在AngularJS中创建一个服务组件很简单,只需要定义一个具有$get方法的构造函数, 然后使用模块的provider方法进行登记: / ...
 - AngularJS 的异步服务测试与Mocking
		
测试 AngularJS 的异步服务 最近,在做项目时掉进了 AngularJS 异步调用 $q 测试的坑中,直接躺枪了.折腾了许久日子,终于想通了其中的道道,但并不确定是最佳的解决方案,最后还是决定 ...
 
随机推荐
- unsafe clr sql 部署向导
			
1.部署安全权限的简单的程序集,非常简单,只需要正常发布就行,基本可以成功,前提是账号有部署clr assembly的权限 第一步: 创建登陆账号,尽量不要使用sa吧,默认架构为:dbo即可 第二部: ...
 - Jumony Core 3,真正的HTML引擎,正式版发布
			
Jumony是一个开源项目,已经有三年的历史了,在这三年中,秉承提供给.NET程序员完整的HTML掌控能力,Jumony历经无数次的改进,终于进入了一个新的阶段.Jumony Core 3是一个真正意 ...
 - BLE 蓝牙协议栈开发
			
1.由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(1) 2.由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(2) 3.由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(3)
 - bzoj4462: [Jsoi2013]编程作业
			
KMP还是有点用处的嘛qwq 对于小写字母,修改其为前一个这个小写字母和它的距离 然后跑KMP就行了 跑得飞快 #include <iostream> #include <cstdi ...
 - 【BZOJ-3195】奇怪的道路     状压DP (好题!)
			
3195: [Jxoi2012]奇怪的道路 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 305 Solved: 184[Submit][Statu ...
 - Java基础-包名和文件夹名字必须对应
			
.java文件夹中的包名必须与物理文件夹的对应. 如果修改包名或者文件夹名,双方都需要同时更新.
 - Beta阶段第二次Scrum Meeting
			
此文章已于 2:51:42 2016/12/8 重新发布到 buaa_overwatch Beta阶段第二次Scrum Meeting 情况简述 BETA阶段第二次Scrum Meeting 敏捷开发 ...
 - Tarjan三把刀
			
搞过OI的对tarjan这个人大概都不陌生.这个人发明了很多神奇的算法,在OI届广被采用. 他最广泛采用的三个算法都是和$dfn$,$low$相关的. 有向图求强连通分量 其实说直白点,就是缩点.用得 ...
 - RDS MySQL 空间问题的原因和解决
			
来源:https://help.aliyun.com/knowledge_detail/41739.html RDS MySQL 空间问题的原因和解决 更新时间:2016-07-22 17:20:14 ...
 - PHP模板引擎正则替换函数 preg_replace 与 preg_replace_callback 使用总结
			
在编写PHP模板引擎工具类时,以前常用的一个正则替换函数为 preg_replace(),加上正则修饰符 /e,就能够执行强大的回调函数,实现模板引擎编译(其实就是字符串替换). 详情介绍参考博文:P ...