【js学习笔记-101】------借助<script>发送HTTP请求
来源:互联网 发布:谷歌优化排名 编辑:程序博客网 时间:2024/05/21 11:10
借助<script>发送HTTP请求:JSONP
<script>元素可以作为一种Ajax传输机制:只须设置<script>元素的src属性,然后浏览器就会发送一个http请求以下载src所指向的URL。
使用<script>元素进行ajax传输的一个主要原因是,它不受同源策略的影响,因此可以使用它们从其他服务器请求数据,第二个原因是包含JSON编码数据的响应体会自动解码(即执行)。
为了实现<script>ajax传输,必须允许web页面可以执行远程服务器发送过来的任何js代码,这意味着对于不可信的服务器,不应该采取该技术。这种方法普遍用于可信的第三方脚本,特别是在页面中嵌入广告和“组件”。这种技术有个名称叫:JSONP
假设你已经写了一个服务,它处理GET请求并返回JSON编码数据。同源的文档可以在代码中使用XMLHttpRequest和JSON.parse()。假如在服务器上启用了CORS,在新的浏览器下,跨域的文档也可以使用XMLHttpRequest享受到该服务。在不支持CROS的旧浏览器,跨域文档只能通过<script>元素访问这个服务。使用jsonp,jsonp响应数据(理论)是合法的js代码,当它到达时浏览器将执行它。相反,不使用jsonp,而是对json编码过的数据解码,结果还是数据,并没有做任何事情。这就是JSONP的意义所有,当通过<script>元素调用数据时,响应内容必须用js函数名和圆括号包裹起来。而不是发送一段json数据。
例:使用script元素发送jsonp请求
function getJSONP(url,callback){
var cbnum = “cb”+getJSONP.counter++;
var cbname = “getJSONP.”+cbnum;
//将回调函数名以表单编码的形式添加到URL的查询部分中
//使用jsonp作为参数名,一些支持jsonp的服务
if(url.indexOf(“?”)===-1)
url+=”?jsonp=”+cbname;
else
url+=”&jspnp=”+cbname;
var script = document.createElement(“script”);
getJSONP[cbnum] = function(response){
try{
callback(response);
}finally{
delete getJSONP[cbnum];
script.parentNode.removeChild(script);
}
};
script.src = url; //设置脚本的url
document.body.appendChild(script);
}
getJSONP.counter = 0;
- 【js学习笔记-101】------借助<script>发送HTTP请求
- 借助script发送http请求:jsonp
- 【JS】【客户端】脚本化HTTP —— 借助<script>发送HTTP请求:JSONP
- 【javascript】 借助script元素发送HTTP请求:JSONP原理-1
- 【javascript】 借助script元素发送HTTP请求:JSONP原理-2
- 【js学习笔记-100】--------跨域HTTP请求
- 封装js发送http请求
- Node.js发送HTTP请求
- node js 发送http请求
- HttpClient学习笔记 --发送Http和Https请求
- js学习笔记:script元素
- http请求学习笔记
- node.js学习笔记之HTTP---发送服务器端响应流
- node.js发送http(get,post)请求
- node.js学习笔记之HTTP获取客户端请求信息
- Node.js中http 接收get请求、接收post请求、发送get请求、发送post请求
- 从零开始学习Node.js例子七 发送HTTP客户端请求并显示响应结果
- Node.Js http模块(一)-发送http请求实例
- bios里super password灰色的设置方法
- 就那样好看,il.o;/
- PHP 的 session_encode() 和 session_decode() 函数
- 递归算法空间的缩减方法与尾递归
- android.process.acore不运行及其它问题解决
- 【js学习笔记-101】------借助<script>发送HTTP请求
- 建新网站要做的四个SEO优化
- 生成排列的方法
- 浏览器缓存机制
- Ubuntu12.04升级至13.04
- 自定义进度条
- java.lang.OutOfMemoryError: Java heap space异常解决方法。
- ubuntu的截图技巧
- 关于javamelody配置后,工程出错问题