你如何从不同的目录中使用ajax?

时间:2009-07-14 02:06:03

标签: javascript ajax jquery

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

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

            |_xml_folder[]  
                   |_xmlfile.xml   

            |_ js_folder[]  
                   |_javascriptfile.js  

            |_ file.html  
            |_ file2.html

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

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

当在文件的根目录中找到HTML文件时,这些工作正常(就像他们现在的样子一样)

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

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

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

3 个答案:

答案 0 :(得分:4)

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

'/project/xml/xmlfile.xml'

如果你希望它比这更通用,你可以做其他事情,比如阅读当前网址并从中构建ajax网址。

更新:回复评论 您可以如何生成正确路径的示例。 如果项目始终是第一个子目录,那么这应该可以构建正确的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更多地了解它运行的环境。

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

由于我讨厌重复代码,我也遇到了同样的问题。

我这样想:

我的目录结构:

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>

shared_js.php 文件正在使用AJAX,所以这就是为什么它在 .php 而不是 .js

$.ajax({
  url: ".<?php echo $_GET[path]; ?>/shared_code/ajax/ajax_script.php",
  ...

因为我必须根据我从哪里调用它来改变该ajax脚本的路径。这是我在 index.php sub_index.php 中设置的 $ _ GET [路径] 变量的内容。

AJAX脚本 ajax_script.php 然后再次使用相对于自身的路径,因此它会像您通常那样:

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