以前遇到过ajax跨域的问题,自己也写过一个简单的servlet 请求代理 来解决过同源策略带来的ajax跨域问题,详细见这个
http://8366.iteye.com/blog/452441
今天在网上发现 使用JQuery+Jsonp 也可以解决ajax跨域问题
首先看下 jsonp 是如何解决跨域问题的,详细见 下面两篇文章
使用 JSONP 实现跨域通信,第 1 部分: 结合 JSONP 和 jQuery 快速构建强大的 mashup
http://www.ibm.com/developerworks/cn/web/wa-aj-jsonp1/
使用 JSONP 实现跨域通信,第 2 部分: 使用 JSONP、jQuery 和 Yahoo! 查询语言构建 mashup
http://www.ibm.com/developerworks/cn/web/wa-aj-jsonp2/
一个JQuery+jsnop 跨域的例子
步骤:
1.在tomcat中配置两个web项目 一个是 /oa ,一个是/jofc2
2.在/oa项目中有个testJQuery.jsp 中发送一个ajax请求到 http://localhost:9090/jofc2/ajax.jsp?callback=? 这是一个跨域请求
3.在testJQuery.jsp 中接受跨域请求的结果
实现步骤:
1. ajax请求代码 必须是get方式
//使用jsonp 跨域访问
$.ajax({
type: "get",
//url: "http://www.cnblogs.com/rss",
// url: "http://suggest.taobao.com/sug?code=utf-8&q=mp3&callback=callback",
url: "http://localhost:9090/jofc2/ajax.jsp?callback=?",
// url: "http://133.64.80.9:9082/bz/ajax.jsp?callback=?",
beforeSend: function(XMLHttpRequest){
//ShowLoading();
},
dataType : "jsonp",
jsonp: 'callback',
success: function(data,textStatus){
$("#loadrss").html("1234");
//alert(textStatus);
alert(data.length);
alert(data[0].name);
alert(data[1].name);
$(data).each(function(i, item){
//jquery 处理html 数据 ,找title 元素
//$("#loadrss").append("<li>"+$(domEle).children("title").text()+"</li>");
//jquery 处理Json 数据
$("#loadrss").append("<li>"+item.name+"</li>");
});
},
complete: function(XMLHttpRequest, textStatus){
//HideLoading();
},
error: function(){
//请求出错处理
}
});
2. 服务器端 业务处理,把处理结果写到输出流里 注意输出流利json串的写法
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<%@page import="java.io.PrintWriter"%>
<%
//服务器端接到回调函数名字输出回调函数,客户端根据回调函数进行解析取得函数中json对象
response.setContentType("text/html; charset=utf-8");
String callback=request.getParameter("callback");
PrintWriter ss = response.getWriter();
ss.print(callback+"([ { name:\"跨域访问成功!\"},{ name:\"跨域访问失败!\"}])");
%>
3.这样前台就可以跨域访问资源了,这种解决方案不足之处是:a.服务器端和客户端必须都按照jsnop的方式 b.不能捕获异常
4.测试时候 访问 http://localhost:9090/oa/testJQuery.jsp
分享到:
相关推荐
利用JQuery jsonp实现Ajax跨域请求 .Net 的*.handler 和 WebService,返回json数据
使用jsonp跨域获取json数据。Ajax获取JAVA服务器json数据。
前端使用jquery,datatype采用jsonp,服务端采用C#编写的webService
1、地址...演示跨域问题以及跨子域名解决方法 2、地址http://a.test.com:8888/testAjaxCross/public/jsonp.do 演示jsonp解决跨域问题的三种方案jsonp、$getJSON、$ajax等
html通过 ajax jsonp跨域请求接收和传送数据 使用HTML页面与后台跨域交互,获得后台数据或传输数据给后台
PHP AJAX JSONP实现跨域请求使用范例
我们拿最近比较火的谍战片来打个比方,JSON是地下党们用来书写和交换情报的“暗号”,而JSONP则是把用暗号书写的情报传递给自己同志时使用的接头方式。看到没?一个是描述信息的格式,一个是信息传递双方约定的方法...
本文实例讲述了jQuery使用JSONP实现跨域获取数据的三种方法。分享给大家供大家参考,具体如下: 第一种方法是在ajax函数中设置dataType为’jsonp’ $.ajax({ dataType: 'jsonp', url: '...
使用jsonp跨域获取json数据。Ajax获取JAVA服务器json数据。
主要给大家介绍了关于利用jsonp解决js读取本地json跨域的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
ajax jsonp 跨域处理
基于jQuery的jsonp ajax跨域请求,
var jsonp = function(url, data, callback) { //1、挂载回调函数 var fnsuffix = Math.random().toString().replace('.', ''); var cbFuncName = 'my_json_cb' + fnsuffix; window[cbFuncName] = callback; /...
很多开发人员在使用jquery在前端和服务器端进行数据交互,所以很容易会认为在前端...1、通过jQuery的ajax进行跨域,这其实是采用的jsonp的方式来实现的。 jsonp是英文json with padding的缩写。它允许在服务器端生成
Asynchronous JavaScript and XML (Ajax) 是驱动新一代 Web 站点(流行术语为 Web 2.0 站点)的关键技术。Ajax 这篇文章主要介绍了AJAX跨域请求JSONP获取JSON数据的实例代码,需要的朋友可以参考下
JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。
处理手段:使用jsonp格式, ajax请求参数dataType:’JSONP’。 代码如下: $.ajax({ url: “http://…….”, type: ‘GET’, dataType: ‘JSONP’,//here success: function (data) {
跨域_jsonp_原理,了解json的原理,等于我们掌握json的技术有帮助
JSONP是一种通过脚本标记注入的方式,它是可以引用跨域URL的js脚本,不过需要提供一个回调函数(必须在您自己的页面上),因此,你可以自己处理结果。 让我们看看JSONP的是怎么在jQuery,MooTools的,Dojo Toolkit中...