js"脚本"文件夹名称前置于XMLHttpRequest调用

时间:2014-09-05 14:27:48

标签: javascript jquery

我的网络服务器的“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服务器(即我基本上处理所有请求)。

  1. 我的网络服务器应该能够处理吗?或者这只是一些我不应该担心的不稳定的浏览器?
  2. 我不应该在javascript中使用“相对”路径吗?而是在java脚本中使用绝对调用?例如:而不是“somemethod.html”,它应该像这样编码:

    xmlhttp.open( “GET”, “http://www.example.com/somemethod.html”,假);

2 个答案:

答案 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. 

来源:http://xhr.spec.whatwg.org/#the-open%28%29-method