JavaScript在发送Ajax请求时,URL的域名地址是使用绝对地址还是相对地址?&什么是浏览器跨域访问操作,js如何实现?

JavaScript在发送Ajax请求时,URL的域名地址是使用绝对地址还是相对地址?

AJAX

AJAX(Asynchronous JavaScript and XML)是运用JavaScript和可扩展语言(XML)实现浏览器与服务器通信的一种技术。

相对地址

相对地址是相对存在的,就是被链接文件相对于当前页面的地址。

绝对地址

绝对地址是一条完整的路径,就是文件在网络或本地的绝对位置。具有唯一性。因此绝对地址能够提升打开的速度。

举个例子:
admin.js文件中的ajax如下:

$ajax({

//根目录

url:"/Handler/doValidation.ashx" 


绝对路径,定位到根目录,本地下会从https://localhost:44380/开始,但是发布到服务器后放在其他文件夹下就会出问题,比如放在http://17.116.151.2/xm 这个文件夹下,以这种从根目录请求的形式请求的路径是http://17.116.151.2/Handler/doValidation.ashx缺少了xm文件夹,这样是找不到的

相对路径,去掉最前面的 斜杠 / ,但是不合适我的这种情况,admin.html和src/page文件夹中的 tool页面都引入了script下的admin.js,

如果使用相对路径admin请求的时候访问的路径是https://localhost:44380/Handler/doValidation.ashx
tool页面引用js中请求的路径是https://localhost:44380/src/page/Handler/doValidation.ashx,因为js的位置是相对于请求它的文件的位置的,

所以对于不同路径的文件引入同一js,不论在本地还是发布后都没办法使用相对路径
因为我现在想发布后能正常使用,解决的办法是
url:"/xm/Handler/doValidation.ashx" //使用绝对路径,路径中加上服务器中的文件夹

})
关于URL地址的问题

无论是使用相对地址还是绝对地址发送Ajax请求都是可以的,两者在发送请求时,服务器访问的地址都会转化为绝对地址。但如果使用相对地址的话,一定要注意填写正确,不然可能导致服务器访问的地址不是你想要的地址。
例如使用"login.java",服务器访问的可能是"http://localhost:8080/keti/login.java"。而"/test/login.java",服务器访问的可能是"http://localhost:8080/test/login.java"。最终访问到的结果不同。

Ajax发送请求过程

在Ajax中,通过XMLHttpRequest对象实现与服务器端的通信。在不同浏览器中有不同的创建对象方法,但使用方法是相同的。在XMLHttpRequest对象创建后,就可以对该对象进行各种不同的操作,从而完成于服务器的通信。


跨域

若在不同源的情况下访问,就称为跨域

跨域的产生来源于现代浏览器所通用的“同源策略”,所谓同源策略,指只有在地址的:

  • 协议名:http,https
  • 域名:http://a.study.cn http://study.cn
  • 端口名

都一样的情况下,才允许访问相同的cookie、localStrage或是发送Ajax请求

【js跨域】js实现跨域访问的几种方式

1、通过jsonp跨域

在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的。但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的。
通过修改document.domain来跨子域

2、通过修改document.domain来跨子域

浏览器都有一个同源策略,其限制之一就是第一种方法中我们说的不能通过ajax的方法去请求不同源中的文档。 它的第二个限制是浏览器中不同域的框架之间是不能进行js的交互操作的。有一点需要说明,不同的框架之间(父子或同辈),是能够获取到彼此的window对象的,但蛋疼的是你却不能使用获取到的window对象的属性和方法(html5中的postMessage方法是一个例外,还有些浏览器比如ie6也可以使用top、parent等少数几个属性),总之,你可以当做是只能获取到一个几乎无用的window对象。

3、使用window.name来进行跨域

window对象有个name属性,该属性有个特征:即在一个窗口(window)的生命周期内,窗口载入的所有的页面都是共享一个window.name的,每个页面对window.name都有读写的权限,window.name是持久存在一个窗口载入过的所有页面中的,并不会因新页面的载入而进行重置。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值