java ajax表单重复提交表单_ajax请求跨域和表单重复提交解决方案

跨域问题

1.ajax请求什么时候会引发跨域问题?

在当前域名请求网站中,默认不允许通过ajax请求发送其他域名。

1.2:发生环境模拟

当在a服务器的页面中发生ajax请求其他域(这里指http://eureka7002.com:6061/)的资源时,浏览器的控制台就会抛出异常信息

e09e8a5e23ebd16203cfb59b223ac87a.png

发送的ajax请求

$.ajax({

type :"get",

url :"http://eureka7002.com:6061/myServlet",

dataType : "JSON"

data: {"userName":"天雁"},

success : function(data) {

alert(data);

},error: function () {

alert("请求错误")

}

});

引发的错误信息

be2a5d35377aa22f66395123ef83f893.png

这种情况之下,b服务器可以接受到a服务器的ajax请求以及数据的,但是无法成功的响应

2.解决方案

2.1在b服务器端添加响应头信息,表示支持所有网站的请求

response.setHeader("Access-Control-Allow-Origin", "*");

2.2使用JSONP

在同源策略下,在某个服务器下的页面是无法获取到该服务器以外的数据的,即一般的ajax是不能进行跨域请求的。但 img、iframe 、script等标签是个例外,这些标签可以通过src属性请求到其他服务器上的数据。利用 script标签的开放策略,我们可以实现跨域请求数据,当然这需要服务器端的配合。Jquery中ajax 的核心是通过 XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加 

当我们正常地请求一个JSON数据的时候,服务端返回的是一串 JSON类型的数据,而我们使用 JSONP模式来请求数据的时候服务端返回的是一段可执行的 JavaScript代码。因为jsonp 跨域的原理就是用的动态加载 script的src ,所以我们只能把参数通过 url的方式传递,所以jsonp的 type类型只能是get!

使用JSONP模式来请求数据的整个流程:

客户端发送一个请求,规定一个可执行的函数名(这里就是 jQuery做了封装的处理,自动帮你生成回调函数并把数据取出来供success属性方法来调用,而不是传递的一个回调句柄),服务器端接受了这个 backfunc函数名,然后把数据通过实参的形式发送出去

第一步:修改a服务器的ajax请求:

$.ajax({

type :"get", //jso

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值