锁定老帖子 主题:ajax 跨域取数据
精华帖 (1) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-05-04
最后修改:2010-05-04
第一次分享。。。 有啥不对的地方。。还望指出! 若有更好的解决方案,呵呵。。 也希望能得到分享!。 背景: 项目中要显示股票指数数据,由于咱们当前系统中没有这些数据,所以只能通过跨域去取数据。由于指数数据是实时数据,初定方案是通过ajax每隔3秒去指定的地址去拿数据。
本地测试通过。。。 上测试环境(正式环境)发现不行!。。 才发现ajax无法跨域取数据。(呵呵,web新手。。见笑了) 第二中方案: 利用js创建dom的原理,去动态创建一个<script></script> 在指定 scr的值 。 function c(){
function a(){ }; } function b(){//回调函数 } setInterval("c()"3000);
上面遗留了一个问题,就是在ie下无法执行回调函数,只能直接去调用函数,但也许会出现这样一种情况,就是数据还在加载,js直接调用回调函数的代码就已经执行了,导致无法取到数据。 我的解决方案是 : 先判断浏览器,然后在通过定时器去定时执行回调函数。(说白了就是ie下推迟执行回调函数) // 判断是否ie 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-05-08
呵呵,其实还有第三种方案
ajax->自己的服务器->URL.openStream(Java),得到数据->写入outputstream->ajax.responseText 过一次服务器,就不怕跨域了。而且没有不同浏览器的障碍。 |
|
返回顶楼 | |
发表时间:2010-05-08
是啊,服务器转发下就行了
|
|
返回顶楼 | |
发表时间:2010-05-09
package org.test; import java.io.IOException; import java.io.InputStream; import java.net.URL; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class TestServlet */ public class TestServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { URL url = new URL("http://www.iteye.com"); InputStream is = url.openStream(); byte[] b = new byte[is.available()]; is.read(b); response.getOutputStream().write(b); is.close(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } 在Servlet或者其他地方返回你要取得的文本流,就像这里的Javaeye一样。写入response流中,ajax就能取到了。 另外回答你的附加问题 ajax和webservice在本质上是完全不一样的东西。但是他们在不同语言的交互这点上,都用了文本流。这点是相同的 |
|
返回顶楼 | |
发表时间:2010-05-10
最后修改:2010-05-10
现在已经有flash和Ajax实现的跨越访问的框架了,又何苦自己写,又不兼容呢? $.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", function(data){ $.each(data.items, function(i,item){ $("<img/>").attr("src", item.media.m).appendTo("#images"); if ( i == 3 ) return false; }); }); jQuery.getScript("http://dev.jquery.com/view/trunk/plugins/color/jquery.color.js", function(){ $("#go").click(function(){ $(".block").animate( { backgroundColor: 'pink' }, 1000) .animate( { backgroundColor: 'blue' }, 1000); }); }); |
|
返回顶楼 | |
发表时间:2010-05-10
jquery取跨域数据也是用script标签实现的。
|
|
返回顶楼 | |
发表时间:2010-05-10
还可以用jsonp
用jquery很方便能做到 je里能搜到相关文章 |
|
返回顶楼 | |
发表时间:2010-05-10
使用Hprose跨域更方便,不需要任何特殊写法,直接使用RPC方式,想怎么跨就怎么跨。支持所有浏览器,甚至在手机上都可以让您轻松实现Ajax跨域访问。
|
|
返回顶楼 | |
发表时间:2010-05-10
andot 写道 使用Hprose跨域更方便,不需要任何特殊写法,直接使用RPC方式,想怎么跨就怎么跨。支持所有浏览器,甚至在手机上都可以让您轻松实现Ajax跨域访问。
安全性怎么保证呢? |
|
返回顶楼 | |
发表时间:2010-05-11
yin_bp 写道 andot 写道 使用Hprose跨域更方便,不需要任何特殊写法,直接使用RPC方式,想怎么跨就怎么跨。支持所有浏览器,甚至在手机上都可以让您轻松实现Ajax跨域访问。
安全性怎么保证呢? 可以通过设置身份认证,访问权限等多种方式来保证。 |
|
返回顶楼 | |