AJAX跨域请求json数据的实现方法


Posted in Javascript onNovember 11, 2013

我们都知道,AJAX的一大限制是不允许跨域请求。 不过通过使用JSONP来实现。JSONP是一种通过脚本标记注入的方式,它是可以引用跨域URL的js脚本,不过需要提供一个回调函数(必须在您自己的页面上),因此,你可以自己处理结果。 让我们看看JSONP的是怎么在jQuery,MooTools的,Dojo Toolkit中实现的。

jQuery的JSONP
jQuery.getJSON方法:

Js代码

jQuery.getJSON("http://search.twitter.com/search.json?callback=?",{ 
    q: "Arsenal" 
},function(tweets) { 
    // Handle response here 
    console.info("Twitter returned: ",tweets); 
});

或者 类似

Js代码

$.ajax({ 
                type:"get", 
                data:"random="+Math.random(), 
                url:url, 
                dataType:"jsonp", 
                jsonp:"callback", 
                success:function(data){ 
                      $.each(data, function(key, val) { 
                        $("#myDiv").html($("#myDiv").html()+val.cvalue+"</br>"); 
                      }); 
                } 
            });

回调方法的参数 通过getJSON 就可以获取 到json对象

MooTools JSONP
MooTools 需要Request.JSONP Class , 可以从这里下载MooTools More .  选择Request.JSONP,
这样 从另一个域获取json就是小菜一碟了.

Js代码

new Request.JSONP({ 
    url: "http://search.twitter.com/search.json", 
    data: { 
        q: "Arsenal" 
    },//提交的参数, 没有参数可以不写 
        callbackKey: 'jsoncallback',//自己定义回调函数的参数名称 
        onComplete: function(tweets) { 
        // Log the result to console for inspection 
        console.info("Twitter returned: ",tweets); 
    } 
}).send();

如果自己定义了回调函数的参数名称. 跟jquery一样.

服务器端你需要这样去取得:

Js代码

String callback = request.getParameter("jsoncallback");//取得回调方法名 
        response.setHeader("Cache-Control", "no-cache"); 
        response.setContentType("text/json;charset=UTF-8"); 
        PrintWriter out; 
        try { 
            out = response.getWriter(); 
            out.print(callback+"("+message+")");//这里是关键.主要就是这里 
            out.flush(); 
            out.close(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        }

顺便说一句: 个人比较喜欢mootools的语法结构,和框架设计思路. 再次赞美!

Dojo JSONP
JSONP 在Dojo Toolkit 中需要用上dojo.io.script (点击可以查看示例)

 
Js代码

// dojo.io.script is an external dependency, so it must be required 
dojo.require("dojo.io.script"); // When the resource is ready 
dojo.ready(function() { 
    // Use the get method 
    dojo.io.script.get({ 
        // The URL to get JSON from Twitter 
        url: "http://search.twitter.com/search.json", 
        // The callback paramater 
        callbackParamName: "callback", // Twitter requires "callback" 
        // The content to send 
        content: { 
            q: "Arsenal" 
        }, 
        // The success callback 
        load: function(tweetsJson) {  // Twitter sent us information! 
            // Log the result to console for inspection 
            console.info("Twitter returned: ",tweetsJson); 
        } 
    }); 
});

JSONP是一种非常有效的,可靠的,容易实现的远程数据获取方式。JSONP的策略也使开发人员能够避免繁琐的服务器代理方式,很方便的获取数据。 你可以自己写一个试试
Javascript 相关文章推荐
文本加密解密
Jun 23 Javascript
前端开发必须知道的JS之原型和继承
Jul 06 Javascript
JQuery获取浏览器窗口内容部分高度的代码
Feb 24 Javascript
JS数组的赋值介绍
Mar 10 Javascript
jquery移动点击的项目到列表最顶端的方法
Jun 24 Javascript
深入浅出讲解ES6的解构
Aug 03 Javascript
使用淘宝镜像cnpm安装Vue.js的图文教程
May 17 Javascript
JavaScript学习笔记之图片库案例分析
Jan 08 Javascript
vue多次循环操作示例
Feb 08 Javascript
微信小程序加载机制及运行机制图解
Nov 27 Javascript
VSCode Vue开发推荐插件和VSCode快捷键(小结)
Aug 08 Javascript
JavaScript中10个Reduce常用场景技巧
Jun 21 Javascript
Javascript弹出窗口的各种方法总结
Nov 11 #Javascript
探讨js中的双感叹号判断
Nov 11 #Javascript
js时间戳格式化成日期格式的多种方法
Nov 11 #Javascript
JavaScript中判断对象类型的几种方法总结
Nov 11 #Javascript
在页面中js获取光标/鼠标的坐标及光标的像素坐标
Nov 11 #Javascript
js中关于一个分号的崩溃示例
Nov 11 #Javascript
javascript中怎么做对象的类型判断
Nov 11 #Javascript
You might like
PHP 加密与解密的斗争
2009/04/17 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
PHP支付宝当面付2.0代码
2018/12/21 PHP
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
javascript常用方法汇总
2014/12/02 Javascript
angular.bind使用心得
2015/10/26 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
2016/08/08 Javascript
Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法
2016/10/13 Javascript
JS插件plupload.js实现多图上传并显示进度条
2016/11/29 Javascript
JavaScript实现经纬度转换成地址功能
2017/03/28 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
JS实现中英文混合文字溢出友好截取功能
2018/08/06 Javascript
nodejs微信开发之自动回复的实现
2019/03/17 NodeJs
基于JS实现视频上传显示进度条
2020/05/12 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
Javascript文本框脚本实现方法解析
2020/10/30 Javascript
Python数字图像处理之霍夫线变换实现详解
2018/01/12 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
python中字符串数组逆序排列方法总结
2019/06/23 Python
TensorFlow tf.nn.conv2d实现卷积的方式
2020/01/03 Python
Pycharm激活方法及详细教程(详细且实用)
2020/05/12 Python
python实现AdaBoost算法的示例
2020/10/03 Python
Crocs卡骆驰洞洞鞋日本官方网站:Crocs日本
2016/08/25 全球购物
澳大利亚儿童鞋在线:The Trybe
2019/07/16 全球购物
实习教师自我鉴定
2013/12/12 职场文书
梅花魂教学反思
2014/04/25 职场文书
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
婚礼父母答谢词
2015/01/04 职场文书
2015年质检工作总结
2015/05/04 职场文书
董事长助理工作总结2015
2015/07/23 职场文书
决心书格式范文
2015/09/23 职场文书
小学四年级作文之最感动的一件事
2019/11/01 职场文书
浅析InnoDB索引结构
2021/04/05 MySQL
NodeJs内存占用过高的排查实战记录
2021/05/10 NodeJs
利用For循环遍历Python字典的三种方法实例
2022/03/25 Python
Java线程的6种状态与生命周期
2022/05/11 Java/Android