如何使Ajax在不同目录下工作?

Nik*_*kko 4 javascript ajax jquery

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

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

            |_xml_folder[]  
                   |_xmlfile.xml   

            |_ js_folder[]  
                   |_javascriptfile.js  

            |_ file.html  
            |_ file2.html
Run Code Online (Sandbox Code Playgroud)

我有一些file.html和file2.html加载,在文档加载时使用jQuery ajax。Ajax使用以下代码:

$(document).ready(function()
{
    $.ajax({
        type: "GET",
        url: "xml/xmlfile.xml",
        dataType: "xml",
            ...
            ...
            ...
}
Run Code Online (Sandbox Code Playgroud)

当在文件的根目录下找到HTML文件时,这些文件就可以正常工作(就像现在一样)

现在,当我将html文件移至文件夹(例如,将file2.html移至another_folder)时,加载xml文件不再起作用。不用说我已经在html上更改了必要的src标记,即:从src \“ js / javascriptfile.js”更改为src = \“ ../ js / javascriptfile.js”。

我没有更改的是javascript文件上的“网址”。现在,由于XML正在尝试在其自己的目录(another_folder / xml / xmlfile.xml)中而不是从其所在的根目录中查找XML文件,因此未加载XML。

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

Bar*_*cat 5

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

'/project/xml/xmlfile.xml'
Run Code Online (Sandbox Code Playgroud)

如果您希望它比以前更通用,那么您还可以做其他事情,例如读取当前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()
Run Code Online (Sandbox Code Playgroud)

此代码使用正则表达式提取URL的第一个目录,并将/xml/xmlfile.xml附加到该目录。

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

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

如果您的项目深度不止一个级别,则应考虑添加一些配置设置,以使javascript进一步了解其运行环境。