`
sonyfe25cp
  • 浏览: 202074 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

解决jQuery的AJAX跨域取xml问题

阅读更多
问题描述:
1.根据已知的url,获取url中的id,然后拼接出另一个url,去获取该id对应的值。
举例:
已知url:http://video.guoshi.com/play/index/4b6a3c233b4cb.html?peixun=1&start=680000
获取id 为:4b6a3c233b4cb
拼接的url:http://video.guoshi.com/rest-video?id=4b6a3c233b4cb
2.通过浏览器可以观察到上面url的内容是:
  <?xml version="1.0" encoding="utf-8" ?> 
<packet version="1.0.0">
  <status>success</status> 
 <data>
 <item>
  <id>4b6a3c233b4cb</id> 
  <count_view>43</count_view> 
  <updated>2010-03-04 17:08:28</updated> 
  </item>
  </data>
  </packet>

3.目标就是取到这个xml中的<count_view>43</count_view>的41
4.采用jQuery的ajax实现.

问题:这个url跟我的系统不是同一个域.涉及到了ajax的跨域问题.由于不能通过修改用户IE的 Internet选项-安全-自定义安全-跨域浏览资源 启用 ,所以这个问题就显得棘手了。

5.思路:
1)自己做一个servlet,让ajax访问自己的servlet来获取这个xml.
2)servlet接收id参数.然后输出对应的xml
3)servlet中采用java的HttpURLConnection来获取原地址的源代码,然后输出.
4)注意设置编码utf-8,类型text/xml

6.servlet:GetClickNum
public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		
		String id=request.getParameter("id");
		String url="http://video.guoshi.com/rest-video?id="+id;
		String curLine = "";
		String content = "";
		URL server=new URL(url);
		HttpURLConnection connection = (HttpURLConnection) server.openConnection();
		connection.connect();
		InputStream is = connection.getInputStream();
		BufferedReader reader = new BufferedReader(new InputStreamReader(is));
		while ((curLine = reader.readLine()) != null) {
			content = content + curLine + "";
		}
		is.close();
		response.setContentType("text/xml");
		response.setCharacterEncoding("utf-8");
		
		ServletOutputStream   out = response.getOutputStream();
		out.print(content);
	}

这样原来的 http://video.guoshi.com/rest-video?id=4b6a3c233b4cb
就转换成 /GetClickNum?id=4b6a3c233b4cb
跨域问题解决!

7.js
$('#rows').find('li').each(function(){
		var url=$(this).find('a[id=videoUrl]').attr('href');
		var b=url.lastIndexOf('index');
		var e=url.lastIndexOf('.');
		var id= url.substring(b+6,e); //the id
		var $li=$(this);
		$.ajax({
			type:"POST",
			url :"GetClickNum",
			data:"id="+id,
			timeout:10000,
			success : function(xml) {
					var val=$(xml).find("data>item>count_view").text();
					$li.find('b[id=click]').html("点击量:"+val);
					//alert(val);
				}
			});
	});


总结:
本文解决ajax跨域问题的思路就是将跨域变成不跨域.将对方服务器的servlet功能由自己的servlet来实现!

具体应用:
http://www.guoshi.com/trainDetails.jsp?q=设计实验验证推测:二氧化硫的化学性质


分享到:
评论
1 楼 sscsacdsadcsd 2016-01-05  
nginx之类做下反代就好了...当然是一个意思

其实我想的是有没更简单的...

相关推荐

    jQuery 获取跨域XML(RSS)数据的相关总结分析

    前段时间项目,需要前端JS获取跨域XML(RSS),最先打算使用jQuery.ajax方法获取,但是在ie9以下,提示“拒绝访问的” 略尴尬,网上查找了相关资料总结了以下几种方法: 一、google的jGFeed:相信很多同学对这个应该不陌生...

    javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】

    AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载...

    详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】

    目录 一、AJAX示例 1.1、优点 1.2、缺点 1.3、jQuery AJAX示例 二、延迟对象(Deferred) 2.1、回调函数 ...AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网

    JQuery Ajax通过Handler访问外部XML数据的代码

    当然,作为客户端脚本,JQuery也会遇到跨域访问资源的问题,什么是跨域访问呢?简单来说就是脚本所要访问的资源属于网站外部的资源,脚本所在的位置和资源所在的位置不在同一区域。默认情况下,浏览器是不允许直接...

    jquery电子文档chm

    jQuery 1.2 中,您可以跨域加载 JSON 数据,使用时需将数据类型设置为 JSONP。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。数据类型设置为 "jsonp" 时...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    ajax操作-JQuery的ajax ajax操作-伪ajax(iframe) ajax操作-时机选择 文件上传(3种方式)-1 文件上传-时机选择及预览-2 图片验证码 KindEditor基本使用和文件操作 作业 第25周 今日内容概要 博客系统示例预览 ...

    探讨Ajax中的一些小问题

    1.ajax跨域传递值是所需要的回传的类型为jsonp $.ajax({ url: "http://.......", type: 'GET', dataType: 'JSONP',//js跨域传值 success: function (data) { } }); dataType 类型:String 预期服务器返回的数据...

    Jquery通过ajax请求NodeJS返回json数据实例

    2.通过HTML的ajax请求,可以实现在不同的服务器上,可跨域获取数据。 3.通信数据格式灵活,可以是xml、json、binary等,数据适合任何平台。 在说说我的环境,我使用的是公司提供的电脑,有很多限制,比如是域中电脑...

    JavaScript权威指南(第六版) 清晰-完整

    19.6 jQuery中的Ajax 19.7 工具函数 19.8 jQuery选择器和选取方法 19.9 jQuery的插件扩展 19.10 jQuery UI类库 第20章 客户端存储 20.1 localStorage和sessionStorage 20.2 cookie 20.3 利用IE userData持久化数据 ...

    advanced-webapps-class:通过Web前端开发领域的专业课程学习系统实用的实现方法

    使用Ajax、XMLHttpRequest、json、jsonp、xml、跨域的服务器异步通信和用户动作处理 框架 jQuery , Daum Jigu 框架介绍,如何正确使用它们 利用开放 API 使用 Open API 的 Javascript Web 应用程序开发实践 ...

    JavaScript权威指南(第6版)(中文版)

    19.6 jQuery中的Ajax 19.7 工具函数 19.8 jQuery选择器和选取方法 19.9 jQuery的插件扩展 19.10 jQuery UI类库 第20章 客户端存储 20.1 localStorage和sessionStorage 20.2 cookie 20.3 利用IE userData持久化数据 ...

    JavaScript权威指南(第6版)

    19.6 jQuery中的Ajax 19.7 工具函数 19.8 jQuery选择器和选取方法 19.9 jQuery的插件扩展 19.10 jQuery UI类库 第20章 客户端存储 20.1 localStorage和sessionStorage 20.2 cookie 20.3 利用IE userData持久化数据 ...

    JavaScript权威指南(第6版) 中文版

    19.6 jquery中的ajax 550 19.7 工具函数 563 19.8 jquery选择器和选取方法 566 19.9 jquery的插件扩展 574 19.10 jquery ui类库 577 第20章 客户端存储 579 20.1 localstorage和sessionstorage 581 20.2 cookie 586 ...

    JavaScript权威指南(第6版)

    19.6 jquery中的ajax 550 19.7 工具函数 563 19.8 jquery选择器和选取方法 566 19.9 jquery的插件扩展 574 19.10 jquery ui类库 577 第20章 客户端存储 579 20.1 localstorage和sessionstorage 581 20.2 cookie 586 ...

    JavaScript权威指南(第6版)中文文字版

    19.6 jquery中的ajax 550 19.7 工具函数 563 19.8 jquery选择器和选取方法 566 19.9 jquery的插件扩展 574 19.10 jquery ui类库 577 第20章 客户端存储 579 20.1 localstorage和sessionstorage 581 20.2 cookie 586 ...

    python入门到高级全栈工程师培训 第3期 附课件代码

    11 粘包解决方法 第31章 01 上节课复习 02 socketserver实现并发 03 socketserver模块介绍 04 socketserver源码分析tcp版本 05 socketserver源码分析udp版 06 ftp作业要求讲解 07 补充:认证客户端链接合法性 第...

    Node与Express开发.pdf

    第 1 章 初识 Express .......................................................................................................................1 1.1 JavaScript 革命 .........................................

Global site tag (gtag.js) - Google Analytics