我的网络服务器的“scripts”文件夹中有一个名为myscripts.js的javascript文件。可以通过以下方式访问它:
http://www.example.com/scripts/myscripts.js
在myscripts.js中是一个javascript函数,它对我网站的 somemethod.html 进行XMLHttpRequest调用。这是调用代码:
xmlhttp.open("GET","somemethod.html",false);
99%的时间一切正常。但我发现一些浏览器正在将“脚本/”添加到呼叫中。所以结果是这样的调用:
http://www.example.com/scripts/somemethod.html
应该是这样的:
http://www.example.com/somemethod.html
这是一个自定义构建的Web服务器(即我基本上处理所有请求)。
我不应该在javascript中使用“相对”路径吗?而是在java脚本中使用绝对调用?例如:而不是“somemethod.html”,它应该像这样编码:
xmlhttp.open( “GET”, “http://www.example.com/somemethod.html”,假);
答案 0 :(得分:2)
在JavaScript中使用相对路径绝对是好的(并且绝大多数都是练习的标准),只要知道他们相对于到的内容:其中的文档你已经包含了JavaScript(不是JavaScript文件。)你似乎对此很清楚,但只是强调。
我从没见过浏览器弄错了。您看到的请求可能来自一个写得不好的网络抓取工具,它正在查看JavaScript的来源,而不是做一些聪明的事情,比如找出它在哪里/如何运行。
但是,为了清楚起见,关于相对的事情(潜伏者比你更多):
鉴于这种结构:
foo.html index.html js/ script.js
在该结构中,如果您在script.js
中加入index.html
:
<script src="js/script.js"></script>
...然后使用该脚本文件中的代码进行XHR调用,在正常运行的浏览器上调用将相对于index.html
,而不是script.js
。
答案 1 :(得分:-1)
我从不使用相对请求,我构建了自己的URL来处理js代码以建立并传递URL并使用&#39; toString&#39;方法给我我正确的网址。
另外,请不要再使用同步XHR调用,理想情况下你应该使用异步和回调,这很痛苦,但它是最好的。
client . open(method, url [, async = true [, username = null [, password = null]]])
Sets the request method, request URL, and synchronous flag.
Throws a "SyntaxError" exception if either method is not a valid HTTP method or url cannot be parsed.
Throws a "SecurityError" exception if method is a case-insensitive match for `CONNECT`, `TRACE` or `TRACK`.
Throws an "InvalidAccessError" exception if async is false, the JavaScript global environment is a document environment, and either the timeout attribute is not zero, the withCredentials attribute is true, or the responseType attribute is not the empty string.