Java二阶段 Jquery ajax

ajax

Asynchronous JavaScript And Xml
异步的js交互技术
根据浏览器的规范,在默认情况下,为了防止XSS、CSRF攻击,XMLHTTPRequest是不可以跨域的。

同源策略

由于浏览器同源策略的限制,非同源下的请求,都会产生跨域问题。
同源策略即:同一协议,同一域名,同一端口号。当其中一个不满足时,我们的请求即会发生跨域问题。
这个问题只有ajax会出现,script标签的src还是img标签的src,或者说link标签的href他们没有被同源策略所限制。

格式一 (不跨域)

一般都是get请求

$.ajax({
    type:"get",
    url:"localhost:8080//xxx?usrname="+$("xx").val(),
    success:function(data){ 
     		data.s.forEach(function(item){
     	 	$("#list").append($("<li>"+item+"</li>"));
       	})
    }
   })

格式二 (跨域)

$.ajax({
    url:"http://suggestion.baidu.com/su?wd="+$(this).val(),
    dataType:"jsonp",
    jsonp:"cb",
    success:function(data){ 
     data.s.forEach(function(item){
      $("#list").append($("<li>"+item+"</li>"));
     })
    }
   })

通过dataType选项还可以指定其他不同数据处理方式。除了单纯的XML,还可以指定 html、json、jsonp、script或者text。其中,text和xml类型返回的数据不会经过处理。数据仅仅简单的将XMLHttpRequest的responseText或responseHTML属性传递给success回调函数。
如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用jsonp类型。使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面。服务器端应当在JSON数据前加上回调函数名,以便完成一个有效的JSONP请求。如果要指定回调函数的参数名来取代默认的callback,可以通过设置$.ajax()的jsonp参数。

解决跨域的第二个方案

CORS

当发送ajax请求时,服务器会返回一个响应头,

第三个方案

服务器转发
在服务器端向第三方服务器发起请求,得到数据,并返回给客户端,对于前端来说是不存在跨域的。
如果用Servlet来实现,需要HttpClient对象。

cookie

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值