转载:http://www.w3cfuns.com/notes/18271/df9ecd8f0ca5e523ae75745a3996c47c.html

JSONP的优缺点
        1.优点
                1.1它不像XMLHttpRequest对象实现的Ajax请求那样受到同源策略的限制,JSONP可以跨越同源策略;
                1.2它的兼容性更好,在更加古老的浏览器中都可以运行,不需要XMLHttpRequest或ActiveX的支持
                1.3在请求完毕后可以通过调用callback的方式回传结果。将回调方法的权限给了调用方。这个就相当于将controller层和view层终于分开了。我提供的jsonp服务只提供纯服务的数据,至于提供服务以 后的页面渲染和后续view操作都由调用者来自己定义就好了。如果有两个页面需要渲染同一份数据,你们只需要有不同的渲染逻辑就可以了,逻辑都可以使用同 一个jsonp服务。
        2.缺点
                2.1它只支持GET请求而不支持POST等其它类型的HTTP请求
                2.2它只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JavaScript调用的问题。
                2.3 jsonp在调用失败的时候不会返回各种HTTP状态码。
                2.4缺点是安全性。万一假如提供jsonp的服务存在页面注入漏洞,即它返回的javascript的内容被人控制的。那么结果是什么?所有调用这个 jsonp的网站都会存在漏洞。于是无法把危险控制在一个域名下…所以在使用jsonp的时候必须要保证使用的jsonp服务必须是安全可信的。

================================================

jquery的$.get $.post $.ajax $.getJSON.

转载:http://www.cnblogs.com/ranzige/p/jquery_get_ajax.html

转载:http://www.jb51.net/article/77470.htm

$.getJSON 的本质是$.get+一个json的参数,get请求才可以跨域。

$.ajax对原声 ajax的一个封装,支持get和post,也可以跨域

================================================

我们通常用的getJSON的用法。

getJSON: function(param) {
var url = param.url,
data = param.data,
success = param.success,
fail = param.fail,
callback = param.callback || 'callback',
timeout = param.timeout || 5000,
maxCount = param.maxCount || 2; var jsonpCallback,
count = -1,
delayID = 0,
s,
self = this,
head = document.head || document.getElementsByTagName('head')[0] || document.documentElement; var tmp = []; if(data) for(var k in data) tmp.push(k + '=' + data[k]); if(!/\?/.test(url)){
url += '?' + tmp.join('&');
}else{
url += '&' + tmp.join('&');
} var addCb = function(){
var time = self.now(),
jsonpCallback = 'vjs_' + time + Math.floor(Math.random()*100); window[jsonpCallback] = function(response) {
destroy(); success.call(this, response,{responseTime: self.now()-time, retryCount: count}); window[jsonpCallback] = null;
}; return jsonpCallback;
}; var destroy = function(){
if(window[jsonpCallback]) window[jsonpCallback] = emptyFn;
clearTimeout(delayID); if (s && s.parentNode) {
head.removeChild(s); s.onload = s.onreadystatechange = null; s = undefined;
}
}; var load = function() {
destroy();
count++;
if (count >= maxCount){
fail && fail.call(this);
return;
} jsonpCallback = addCb(); var jsonpUrl = url; if(/(\=)\?(&|$)/i.test(jsonpUrl)){
jsonpUrl = jsonpUrl.replace(/(\=)\?(&|$)/i,'$1' + jsonpCallback + '$2');
}else{
jsonpUrl += '&' + callback + '=' + jsonpCallback;
} if(param.log) param.log.pushLog('lib getJSON===' + jsonpUrl + '===' + jsonpCallback + '====' + count);
s = document.createElement('script');
s.setAttribute('type', 'text/javascript');
s.setAttribute('src', jsonpUrl); head.insertBefore(s, head.firstChild); delayID = setTimeout(load, timeout);
}; load(); return {
destroy : destroy
}
}

  

最新文章

  1. C# 中的委托和事件
  2. jQuery.unique引发一个血案
  3. zDiaLog弹出层
  4. C# 连接操作MYSQL 数据库_02
  5. css自定义字体完美解决方案example
  6. Mysql varchar大小长度问题介绍
  7. Her and his blog
  8. linux —— ubuntu 初次安装问题
  9. 高性能Java Web 页面静态化技术
  10. 启动tomcat后struts框架报异常严重: Exception starting filter struts2 Unable to load configuration. - Class: java.net.PlainSocketImpl
  11. java_JFrame_demo
  12. 关于java和c++中的i++
  13. 【故障公告】10:30-10:45 左右 docker swarm 集群节点问题引发故障
  14. FPGA中带优先级的if else if与不带优先级的case的探讨
  15. 持续集成-Jenkins安装部署
  16. sqlmap工作流程图
  17. 千万级高并发负载均衡软件haproxy配置文件详解
  18. 【AtCoder】ARC062F - AtCoDeerくんとグラフ色塗り / Painting Graphs with AtCoDeer
  19. jquery50个代码段
  20. SQL性能调优

热门文章

  1. Linux 性能优化工具包 sysstat 以及 sysstat 服务
  2. su认证失败&文件夹里打开终端的方法&atom安装
  3. linux vi编辑器操作手册
  4. 移动测试会Ebay沙龙PPT
  5. Vijos1019 补丁VS错误[最短路 状态压缩]
  6. Codeforces Round #371 (Div. 2)E. Sonya and Problem Wihtout a Legend[DP 离散化 LIS相关]
  7. openjudge1768 最大子矩阵[二维前缀和or递推|DP]
  8. ArrayList实现线程安全的blogs
  9. HOLOLENS的DEVICE POTAL连接和安装
  10. LInux下修改 ~/.bashrc 文件source ~/.bashrc 后 shell 命令 失效 任何命令都显示 “ bash XX :未找到命令”