2009-07-14 31 views
1

首先,讓我告訴你的文件夾結構:你如何從不同的目錄製作Ajax作品?

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

      |_xml_folder[] 
        |_xmlfile.xml 

      |_ js_folder[] 
        |_javascriptfile.js 

      |_ file.html 
      |_ file2.html 

我對文檔加載一些file.html和file2.html負載使用jQuery阿賈克斯。 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

在js文件中使用絕對URL例如

'/project/xml/xmlfile.xml' 

如果你希望它是比這更一般的,還有其他的事情可以做,比如讀取當前網址和建設從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() 

此代碼使用正則表達式抽出url的第一個目錄並將/xml/xmlfile.xml附加到它。

例如如果頁面example.com/project1/awesome/index.html,它返回example.com/project1/xml/xmlfile.xml

注意這個代碼是非常脆弱的,你可能會想添加一些檢查它。這只是一個例子。

如果你的項目不止一個層次深,你應該考慮增加一些配置設置,讓JavaScript的瞭解更多關於它在運行的環境。

+0

我試過你的答案,問題是,我希望HTML文件「不在乎」放置的位置,以便它們可以放置在目錄中,儘管它們來自文檔根目錄(有時候,它將大約3-4個文件夾爲低)。 至於獲取當前網址,我也試過了,但是如何獲得文件的主目錄,以便將當前網址與當前網址進行比較? 例如: 當前文件位於「public_html/project_folder/another_folder/another_sub_folder/file2.html」中 如何從所有這些文件中獲取「project_folder?」如果該文件位於1dir以下,該怎麼辦? – Nikko 2009-07-14 02:17:05

3

所使用的網址是相對於Web根目錄,不當前目錄。

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

與我對上述人員的評論相同: 「我希望HTML文件不要在意它們放在哪裏,以便它們可以放在目錄中,儘管它們來自文檔根目錄(有時它將大約3-4文件夾低)至於獲取當前的網址,我也試過了,但是如何獲得文件的主目錄,以便將當前的網址與當前的網址進行比較?例如:當前文件位於「public_html/project_folder/another_folder/another_sub_folder/file2.html」如何從中獲取「project_folder?」如果文件位於1dir以下,該怎麼辦? – Nikko 2009-07-14 02:17:46

1

因爲我討厭重複的代碼,我也有同樣的問題。

我想通了這種方式:

我的目錄結構:

include_db/ 
    dbconnect.php 
main_project/ 
    shared_code/ 
    ajax/ 
     ajax_script.php 
    shared_js.php 
    sub_project/ 
    sub_index.php 
    index.php 

請注意,我真的有在JavaScript的.PHP文件!我會解釋爲什麼更低。

的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腳本。這就是$ _GET [path]變量的內容,我在index.php設置的變量sub_index.php

的AJAX腳本ajax_script.php然後再次使用相對路徑本身,以便它會像平時那樣:

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