【学亮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--
【学亮IT手记】Ajax跨域问题精讲--jQuery解决跨域操作的更多相关文章
- 【学亮IT手记】jQuery each()函数用法实例
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...
- [ionic开源项目教程] - 第14讲 ionic解决跨域问题
[ionic开源项目教程] 第14讲 使用jsonp解决跨域问题 相信很多朋友在开发中都会遇到以下这个问题. No 'Access-Control-Allow-Origin' header is pr ...
- 【学亮编程手记】Spring Cloud三大组件Eureka/Feign/Histrix的原理及使用
- 【学亮IT手记】MySql行列转换案例
create table score( name ), math int, english int ); ,); ,); ,); ,); SHOW tables; SELECT * from scor ...
- 【学亮IT手记】mysql创建/查看/切换数据库
--创建数据库 create database web_test1 CHARACTER set utf8; --切换数据库 use web_test1; --查看当前使用的数据库 select DAT ...
- 【学亮IT手记】Servlet的生命周期
1.1 Servlet的生命周期 1.1.1 Servlet的生命周期概述 1.1.1.1 什么是生命周期 生命周期:一个对象从创建到销毁过程. 1.1.1.2 Servlet的生命周期(*****) ...
- 【学亮IT手记】利用字节流复制图片
- 【学亮IT手记】利用字节流复制文件
- 【学亮IT手记】使用Map代替switch...case语句
随机推荐
- Vue修改、编辑时,撤销修改内容,表格内容不变
在编辑该行的过程中,突然不想编辑了,想点击撤销按钮,将该行数据恢复到旧值,目前的做法是,在点击编辑按钮的时候转换成json字符,点击撤销按钮的时候再解析成对象,赋值给该行的数据. // 编辑editH ...
- E. Magic Stones CF 思维题
E. Magic Stones time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- 在 Linux 中自动配置 IPv6 地址
在 Linux 中自动配置 IPv6 地址 在本文中,我们将学习如何为 ULA 自动配置 IP 地址. 何时使用唯一本地地址 唯一本地地址unique local addresses(ULA)使用 f ...
- 11g SPA (sql Performance Analyze) 进行升级测试
注;转自http://ju.outofmemory.cn/entry/77139 11G的新特性SPA(SQL Performance Analyze)现在被广泛的应用到升级和迁移的场景.当然还有一些 ...
- ansible的playbook进行yum批量安装nginx最新版本
环境:centos7 版本:nginx最新版本 软件: ansible 作用: 进行批量执行不同机器上,进行安装nginx版本 检查脚本是否正确: [root@ansible-test ansible ...
- 【转】java将excel文件转换成txt格式文件
在实际应用中,我们难免会遇到解析excel文件入库事情,有时候为了方便,需要将excel文件转成txt格式文件.下面代码里面提供对xls.xlsx两种格式的excel文件解析,并写入到一个新的txt文 ...
- (七)JavaScript 函数
带有返回值的函数 JavaScript 变量的生存期 JavaScript 变量的生命期从它们被声明的时间开始. 局部变量会在函数运行以后被删除. 全局变量会在页面关闭后被删除.
- springboot使用lettuce连接池
springboot对连接池的使用非常智能,配置文件中添加lettuce.pool相关配置,则会使用到lettuce连接池,并将相关配置设置为连接池相关参数,(前提是这些参数是springboot配置 ...
- KNN-笔记(2)
1 - kd Tree KD树是一种对K维空间中的实例点进行存储以便对其进行快速检索的树形数据结构.KD树其实就是二叉树,表现为对K维空间的一个划分,构造kd树相当于不断的用垂直于坐标轴的超平面将k维 ...
- WebApi测试工具:SAEA.RESTED
写好一个Api接口不知道怎么测试?试试SAEA.RESTED吧——无需任何代码.不污染主项目.快速上手.不依赖IIS,可供多人共享使用!下面就跟着本文查看如何使用吧:1.下载安装:https://gi ...