2009-07-14 13 views
1

Zunächst möchte ich Ihnen die Ordnerstruktur zeigen:Wie funktioniert Ajax aus verschiedenen Verzeichnissen?

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

      |_xml_folder[] 
        |_xmlfile.xml 

      |_ js_folder[] 
        |_javascriptfile.js 

      |_ file.html 
      |_ file2.html 

Ich habe einige file.html und file2.html Last Verwendung jQuery Ajax auf Dokument laden. Ajax verwendet diesen Code:

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

Diese funktioniert gut, wenn die HTML-Dateien im Stammverzeichnis der Dateien gefunden werden (nur die Art, wie sie sind jetzt) ​​

Nun, wenn ich eine HTML-Datei auf ein bewegen Ordner (zB Datei2.html in einen anderen Ordner verschieben), das Laden der XML-Datei funktioniert nicht mehr. Nehme nicht an, dass ich die notwendigen src-Tags im HTML geändert habe, zB: von src \ "js/javascriptfile.js" nach src = \ "../ js/javascriptfile.js".

Was ich nicht geändert habe, ist die "URL" in der Javascript-Datei. Und jetzt wird das XML nicht geladen, weil es versucht, nach der XML-Datei in seinem eigenen Verzeichnis (another_folder/xml/xmlfile.xml) zu suchen, und nicht nach dem Stammverzeichnis, in dem es sich befindet.

Meine Frage ist, was sollte getan werden, um dieses Problem zu vermeiden?

Antwort

3

Verwenden Sie eine absolute URL in der js-Datei, z.

'/project/xml/xmlfile.xml' 

Wenn Sie es wünschen, als dass allgemeinere zu sein, gibt es andere Dinge, die Sie tun könnten, wie die aktuelle URL zu lesen und die Ajax-URL aus, dass der Aufbau.

Aktualisierung: Antwort auf Kommentar Ein Beispiel, wie Sie den richtigen Pfad generieren können. Wenn Projekte immer das erste Unterverzeichnis sind, sollte dies funktionieren, um die richtige URL zu erstellen.

function xml_url(){ 
var first_dir_regexp = /https?:\/\/[^\/]+\/([^\/]+)\/.+/; 
matches = first_dir_regexp.exec(document.location.toString()); 
return matches[1]+"/xml/xmlfile.xml"; 
} 
//... 
xml_url() 

Dieser Code verwendet eine regexp das erste Verzeichnis von einer URL zu ziehen und anhängt /xml/xmlfile.xml zu.

z.B., wenn die Seite example.com/project1/awesome/index.html ist, gibt sie example.com/project1/xml/xmlfile.xml

Hinweis dieser Code ziemlich zerbrechlich ist, würden Sie wahrscheinlich einige hinzufügen möchten überprüft es. Es ist nur ein Beispiel.

Wenn Ihre Projekte mehr als eine Ebene tief sind, sollten Sie das Hinzufügen einiger Config-Einstellungen zu berücksichtigen, dass die Javascript mehr über die Umwelt wissen, lassen Sie es in läuft.

+0

ich Ihre Antwort habe versucht, und das Problem ist, dass ich wollte, dass die HTML-Dateien "nicht darauf achten", wo sie hingelegt werden, damit sie in das Verzeichnis gesetzt werden können, wie niedrig sie auch aus dem Dokumentenstamm sind (und manchmal werden es etwa 3-4 Ordner sein). Wie zum Abrufen der aktuellen URL, habe ich es auch versucht, aber wie erhalten Sie das Home-Verzeichnis der Datei, so dass es etwas geben würde, um die aktuelle URL zu vergleichen? zB: Die aktuelle Datei befindet sich in "public_html/project_folder/another_folder/another_sub_folder/file2.html" Wie bekommen Sie "project_folder von all dem?" Was, wenn die Datei 1Dir niedriger liegt? – Nikko

3

Verwenden URLs, die auf der Web-Root relativ sind, nicht das aktuelle Verzeichnis

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

Das gleiche wie mein Kommentar für den Kerl oben: "Ich wollte die HTML-Dateien zu" nicht kümmern ", wo sie gesetzt werden, so dass sie in das Verzeichnis platziert werden können, wie niedrig sie aus dem Dokumentenstamm (und manchmal, es sind) Es wird ungefähr 3-4 Ordner geben.) Um die aktuelle URL zu bekommen, habe ich es auch ausprobiert, aber wie bekommt man das Home - Verzeichnis der Datei, damit es etwas gibt, mit dem man die aktuelle URL vergleichen kann? Die aktuelle Datei befindet sich in "public_html/project_folder/another_folder/another_sub_folder/file2.html" Wie bekommst du "project_folder von all dem?" Was wäre, wenn die Datei 1dir niedriger wäre? " – Nikko

+1

Wenn Sie die XML-Datei vom Webstamm aus referenzieren, sollte es keine Rolle spielen, wo sich die HTML-Dateien befinden. Auf die XML-Datei wird immer verwiesen, solange sie nicht den Ordner in der Hierarchie verschiebt. – tvanfosson

+0

Danke für den // beachten Sie den führenden Schrägstrich –

1

Da ich Doppelarbeit des Codes hasse, hatte ich das gleiche Problem auch.

Habe ich es auf diese Weise aus:

Meine Verzeichnisstruktur:

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

Bitte beachten Sie, dass ich Sie Javascript in .php Datei wirklich!Ich werde erklären, warum niedriger.

Von index.php ich sind geteilt java dies erklärt:

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

Von sub_index.php Ich mache es so:

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

Die shared_js.php Datei verwendet AJAX, also hier ist, warum ist es in .php anstelle von .js:

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

Weil ich den Pfad zu diesem Ajax-Skript zu ändern habe, basierend auf dem telefoniere ich es aus. Und das ist der Inhalt von $ _GET [Pfad] Variable, die ich in index.php oder sub_index.php.

Die AJAX-Skript ajax_script.php wird dann wieder mit Pfaden relativ zu sich selbst, so dass es etwas haben wie Sie es normalerweise tun würde:

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