【学亮IT手记】Ajax跨域问题精讲--jQuery解决跨域操作

什么是跨域

跨域,它是不同的域名(服务器)之间的相互的资源之间的访问。

当协议,域名,端口号任意一个不同,它们就是不同的域。

正常情况下,因为浏览器安全的问题,不同域之间的资源是不可以访问的。

跨域的解决方案

什么情况下会用到跨域?

一般情况,是在自己的内部的工程中会出现跨域的情况。

有三种解决方案:

1.服务器跨域(代理方案)

2.jsonp,<script>标签的开发策略。

3.XHR2,HTML5提供,一般是在移动开发中使用。

jQuery解决跨域操作

在jquery中可以使用$.ajax,$.getJSON,$.getScript来解决跨域问题。

前端html/js部分代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>案例-显示商品信息</title>
<script type="text/javascript"
	src="/jquery_crossDomain/js/jquery-1.8.3.js"></script>
<script type="text/javascript">
	$(function() {
		//将div隐藏
		$("#content").hide();
		$("#a").toggle(function() {
			//向服务器发送请求,得到商品信息,在页面上展示
			var url = "http://localhost:8080/jquery_ajax/product?callback=?"
			$.getJSON(url,function(data) {
				var jsonObj = eval(data);
				//[{"count":100,"id":1,"name":"电视机","price":2000},{"count":200,"id":2,"name":"洗衣机","price":1000}]
				//处理响应json数据,封装成table的html代码
				var tab = $("<table border=‘1‘><tr><td>编号</td><td>名称</td><td>数量</td><td>价格</td></tr></table>");

				for (var i = 0; i < jsonObj.length; i++) {
					var obj = jsonObj[i];
					var tr = $("<tr><td>"
							+ obj.id
							+ "</td><td>"
							+ obj.name
							+ "</td><td>"
							+ obj.count
							+ "</td><td>"
							+ obj.price
							+ "</td></tr>");
					//内部插入操作
					tab.append(tr);
				}
				//将table在添加到div中
				$("#content").append(tab);

				//显示div
				$("#content").fadeIn(1500);

			});
		}, function() {
			//将商品的信息隐藏
			//将div隐藏
			$("#content").fadeOut(1500);
			//清空div
			$("#content").html("");
		});
	});
</script>
</head>
<body>
	<a href="javascript:void(0)" id="a">显示商品信息</a>
	<hr>
	<div id="content"></div>
</body>
</html>

后台java代码部分:

public class ProductServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String callback=request.getParameter("callback");
		//处理响应数据的中文乱码
		response.setCharacterEncoding("utf-8");
		Product p1 = new Product();
		p1.setId(1);
		p1.setCount(100);
		p1.setName("电视机");
		p1.setPrice(2000);

		Product p2 = new Product();
		p2.setId(2);
		p2.setCount(200);
		p2.setName("洗衣机");
		p2.setPrice(1000);

		List<Product> list = new ArrayList<Product>();
		list.add(p1);
		list.add(p2);
		// 将其转换成json响应到浏览器 fastjson进行java对象到json之间的转换
		String json = JSONObject.toJSONString(list);
		response.getWriter().write(callback+"("+json+")");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

--end--

原文地址:https://www.cnblogs.com/niwotaxuexiba/p/9386433.html

时间: 2024-10-18 17:28:55

【学亮IT手记】Ajax跨域问题精讲--jQuery解决跨域操作的相关文章

Django 【第十九篇】JS实现的ajax、同源策略和前端jsonp解决跨域问题

一.回顾jQuery实现的ajax 首先说一下ajax的优缺点 优点: AJAX使用Javascript技术向服务器发送异步请求: AJAX无须刷新整个页面: 因为服务器响应内容不再是整个页面,而是页面中的局部,所以AJAX性能高: jquery 实现的ajax index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <t

【学亮IT手记】jQuery each()函数用法实例

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script> 6 <script type="text/javascript"> 7 $(functi

【学亮IT手记】jQuery callback方法实例

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"> 6 </script> 7 <script> 8 $(document).ready(function(){ 9 $(&quo

【学亮IT手记】jQuery text()/html()回调函数实例

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script> 6 <script type="text/javascript"> 7 $(functi

【学亮IT手记】Servlet的生命周期

1.1 Servlet的生命周期 1.1.1 Servlet的生命周期概述 1.1.1.1 什么是生命周期 生命周期:一个对象从创建到销毁过程. 1.1.1.2 Servlet的生命周期(*****) Servlet生命周期:Servlet对象从创建到销毁的过程. l Servlet何时被创建又是何时被销毁的? Servlet中有init,service,destroy方法,这几个方法称为是Servlet生命周期相关的方法. l Servlet是在第一次被访问的时候会被实例化,只要Servlet

【学亮IT手记】mysql创建/查看/切换数据库

--创建数据库 create database web_test1 CHARACTER set utf8; --切换数据库 use web_test1; --查看当前使用的数据库 select DATABASE(); 原文地址:https://www.cnblogs.com/niwotaxuexiba/p/10346618.html

PhoneGap开发跨平台移动APP - 解决跨域资源共享

解决跨域资源共享 一.WebApi解决跨域资源共享. 开发中选择WebApi来作为服务端的数据接口,由于使用PhoneGap,就需要通过js来获取远程远程数据服务器的数据,由于同源策略的限制,这就涉及到跨域资源共享问题. 首先新建一个简单的WebApi项目, 使用微软的CORS解决方案,再Nugget中下载microsoft.aspnet.webapi.cors. 配置WebApiConfig: //这里先用*来测试,生产环境下,这样配置是不安全的,需要做一些限制.config.EnableCo

用fiddler解决跨域访问

在调试ajax请求时,经常遇到的是跨域的问题,而解决跨域问题其中之一的办法就是服务器端添加 Access-Control-Allow-Origin : *这样的头 在服务器没作出修改之前,我们要模拟这个情况就得用到fiddler了 两种方式,各有长短,先上图再说 方法1:修改CustomRules.js  通过修改CustomRules.js给Fiddler添加菜单项,效果永久有效,操作方便,也可随时自定,实现如下 a. 在CustomRules.js的 public static RulesO

什么是跨域及怎么解决跨域问题?

什么是跨域? 这篇博文解释的挺清楚,我直接引用 https://blog.csdn.net/lambert310/article/details/51683775 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器施加的安全限制. 所谓同源是指,域名,协议,端口均相同,只要有一个不同,就是跨域.不明白没关系,举个栗子: http://www.123.com/index.html 调用 http://www.123.com/server.php (非跨域) http: