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 相关文章推荐
Add a Table to a Word Document
Jun 15 Javascript
ExtJS的FieldSet的column列布局
Nov 20 Javascript
一个简单的js鼠标划过切换效果
Jun 30 Javascript
jquery中ajax学习笔记4
Oct 16 Javascript
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
Jan 04 Javascript
jQuery AJAX实现调用页面后台方法和web服务定义的方法分享
Mar 01 Javascript
JavaScript事件处理器中的event参数使用介绍
May 24 Javascript
js离开或刷新页面检测(且兼容FF,IE,Chrome)
Mar 05 Javascript
js实现分割上传大文件
Mar 09 Javascript
JavaScript 深层克隆对象详解及实例
Nov 03 Javascript
10个经典的网页鼠标特效代码
Jan 09 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
Jan 19 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
echo(),print(),print_r()之间的区别?
2006/11/19 PHP
Discuz板块横排显示图片的实现方法
2007/05/28 PHP
PHP的单引号和双引号 字符串效率
2009/05/27 PHP
List Information About the Binary Files Used by an Application
2007/06/18 Javascript
CSS常用网站布局实例
2008/04/03 Javascript
javascript import css实例代码
2008/07/18 Javascript
jquery的Tooltip插件 qtip使用详细说明
2010/09/08 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
javascript自然分类法算法实现代码
2013/10/11 Javascript
javascript查找字符串中出现最多的字符和次数的小例子
2013/10/29 Javascript
jQuery中 delegate使用的问题
2015/07/03 Javascript
Javascript生成全局唯一标识符(GUID,UUID)的方法
2016/02/27 Javascript
Bootstrap模仿起筷首页效果
2016/05/09 Javascript
BootStrap中Table分页插件使用详解
2016/10/09 Javascript
简单谈谈JS数组中的indexOf方法
2016/10/13 Javascript
Angular设置别名alias的方法
2018/11/08 Javascript
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
uniapp 仿微信的右边下拉选择弹出框的实现代码
2020/07/12 Javascript
Vue 请求传公共参数的操作
2020/07/31 Javascript
在Python程序中操作文件之isatty()方法的使用教程
2015/05/24 Python
Python二分查找详解
2015/09/13 Python
基于python的字节编译详解
2017/09/20 Python
对python数据切割归并算法的实例讲解
2018/12/12 Python
Python 中Django验证码功能的实现代码
2019/06/20 Python
Python DES加密实现原理及实例解析
2020/07/17 Python
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
Canvas制作旋转的太极的示例
2018/03/09 HTML / CSS
韩国家庭购物网上商店:Nsmall
2017/05/07 全球购物
英国豪华真皮和布艺沙发销售网站:Darlings of Chelsea
2018/01/05 全球购物
馥绿德雅美国官方网站:Rene Furterer头皮护理专家
2019/05/01 全球购物
澳大利亚在线购买葡萄酒:The Wine Collective
2020/02/20 全球购物
应届毕业生通用的自荐书范文
2014/02/07 职场文书
教师岗位聘任书范文
2014/03/29 职场文书
大学学生个人总结
2015/02/15 职场文书
员工年度工作总结2015
2015/05/18 职场文书
2019大学生社会实践报告汇总
2019/08/16 职场文书