Javascript 如何使ajax在不同的目录中工作?

Javascript 如何使ajax在不同的目录中工作?,javascript,ajax,jquery,Javascript,Ajax,Jquery,首先,让我向您展示文件夹结构: public_html[] |_ project_folder[] |_another_folder[] |_xml_folder[] |_xmlfile.xml |_ js_folder[] |_javascriptfile.js |_ file.

首先,让我向您展示文件夹结构:

public_html[]  
     |_ project_folder[]  
            |_another_folder[]  

            |_xml_folder[]  
                   |_xmlfile.xml   

            |_ js_folder[]  
                   |_javascriptfile.js  

            |_ file.html  
            |_ file2.html
我有一些file.html和file2.html加载,在文档加载上使用jqueryajax。Ajax使用以下代码:

$(document).ready(function()
{
    $.ajax({
        type: "GET",
        url: "xml/xmlfile.xml",
        dataType: "xml",
            ...
            ...
            ...
}
当在文件的根目录中找到HTML文件时(就像现在一样),这些方法可以很好地工作

现在,当我将一个html文件移动到一个文件夹(例如,将file2.html移动到另一个文件夹)时,加载xml文件不再有效。不要以为我已经在html ie上更改了必要的src标记:从src\“js/javascriptfile.js”到src=\“./js/javascriptfile.js”

我没有更改的是javascript文件上的“url”。现在,XML没有加载,因为它试图在自己的目录(另一个文件夹/XML/xmlfile.XML)中查找XML文件,而不是从它所在的根目录中查找


我的问题是,应该怎么做才能避免这个问题?

在js文件中使用绝对URL,例如

'/project/xml/xmlfile.xml'
如果您希望它更通用,那么您还可以做其他事情,比如读取当前url并从中构建ajax url

更新:回复评论 一个如何生成正确路径的示例。 如果项目始终是第一个子目录,那么这将有助于构建正确的url

function xml_url(){
var first_dir_regexp = /https?:\/\/[^\/]+\/([^\/]+)\/.+/;
matches = first_dir_regexp.exec(document.location.toString());
return matches[1]+"/xml/xmlfile.xml";
}
//...
xml_url()
这段代码使用regexp拉出url的第一个目录,并将/xml/xmlfile.xml追加到该目录

例如如果页面为example.com/project1/awesome/index.html,则返回example.com/project1/xml/xmlfile.xml

注意此代码非常脆弱,您可能需要添加一些检查。这只是一个例子


如果您的项目超过一个级别,您应该考虑添加一些配置设置,让JavaScript更了解它正在运行的环境。

使用相对于Web根而不是当前目录的URL。

$(document).ready(function()
{
    $.ajax({
        type: "GET",
        url: "/xml/xmlfile.xml", // note the leading slash
        dataType: "xml",
            ...
            ...
            ...
}

因为我讨厌代码重复,所以我也有同样的问题

我是这样想的:

<script type="text/javascript" src="../shared_code/shared_js.php?path=."></script>
我的目录结构:

include_db/
  dbconnect.php
main_project/
  shared_code/
    ajax/
      ajax_script.php
    shared_js.php
  sub_project/
    sub_index.php
  index.php
请注意,我在.php文件中确实有javascript!我会解释为什么更低

index.php中,我包含了声明以下内容的共享java:

<script type="text/javascript" src="./shared_code/shared_js.php"></script>

sub_index.php我这样做:

<script type="text/javascript" src="../shared_code/shared_js.php?path=."></script>

共享的_js.php文件使用的是AJAX,下面是为什么它在.php中而不是.js中:

$.ajax({
  url: ".<?php echo $_GET[path]; ?>/shared_code/ajax/ajax_script.php",
  ...
$.ajax({
url:“./shared_code/ajax/ajax_script.php”,
...
因为我必须根据调用它的位置来更改ajax脚本的路径。这就是我在index.phpsub\u index.php中设置的$\u GET[path]变量的内容

AJAX脚本AJAX\u script.php将再次使用相对于自身的路径,因此它将具有您通常会执行的操作:

<?php
    require("../../../include_db/dbconnect.php");

我尝试了你的答案,问题是我希望HTML文件“不在乎”它们放在哪里,这样它们就可以放在目录中,不管它们来自文档根目录的位置有多低(有时,它会低3-4个文件夹)。至于获取当前url,我也尝试过,但是如何获取文件的主目录,以便将当前url与之进行比较?例如:当前文件位于“public_html/project_folder/other_folder/other_sub_folder/file2.html”中。如何从所有这些中获取“project_folder”如果该文件位于1dir更低的位置会怎么样?与我对上面那个家伙的评论相同:“我希望HTML文件“不在乎”它们放在哪里,这样它们就可以被放在目录中,不管它们从文档根目录的位置有多低(有时,它会低3-4个文件夹)。至于获取当前url,我也尝试过,但是如何获取文件的主目录,以便将当前url与之进行比较?例如:当前文件位于“public_html/project_folder/other_folder/other_sub_folder/file2.html”中。如何从所有这些中获取“project_folder”?“如果文件位于1dir更低的位置会怎么样?”如果从web根目录引用XML文件,则HTML文件位于何处并不重要。只要不在层次结构中移动其文件夹,XML文件将始终被引用到何处。感谢//注意前导斜杠