2009-07-14 2 views
1

첫째, 내가 당신에게 폴더 구조를 보여주지 :어떻게 서로 다른 디렉토리에서 아약스 작동합니까?

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

      |_xml_folder[] 
        |_xmlfile.xml 

      |_ js_folder[] 
        |_javascriptfile.js 

      |_ file.html 
      |_ file2.html 

나는 문서로드에 대한 몇 가지 file.html과 및 file2.html 부하 사용 jQuery를 아약스 있습니다. 나는에 HTML 파일을 이동할 때 HTML 파일이 파일 (그들은 지금 다만 방법) 이제

의 루트 디렉토리에 발견되면

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

이 작품을 잘 : Ajax는이 코드를 사용 폴더 (예 : file2.html을 another_folder로 이동)하면 xml 파일을로드하는 것이 더 이상 작동하지 않습니다. src \ "js/javascriptfile.js"에서 src = \ "../ js/javascriptfile.js"로 필요한 HTML 태그를 변경했습니다.

내가 변경하지 않은 것은 javascript 파일의 "url"입니다. 그리고 XML은 자신의 디렉토리 (another_folder/xml/xmlfile.xml)에있는 XML 파일을 찾고 XML 파일이있는 루트 디렉토리가 아니라 XML 파일을로드하려고하기 때문에로드되지 않습니다.

제 질문은이 문제를 피하기 위해해야 ​​할 일은 무엇입니까?

답변

3

예를 들어 js 파일에서 절대 URL을 사용하십시오. 당신은 그것보다 더 일반적인 싶은 경우

'/project/xml/xmlfile.xml' 

, 현재 URL을 읽고 그에서 아약스 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 반환 그것을 확인합니다. 그것은 단지 예일뿐입니다. 프로젝트가 하나 개 이상의 수준 깊은 경우

, 당신은 자바 스크립트가 실행되는 환경에 대한 자세한 내용을 알려 일부 구성 설정을 추가하는 것을 고려한다. 웹 루트를 기준으로

+0

하고, 문제는 내가 HTML 파일을 어디에 두는 지 신경 쓰지 않기를 원했기 때문에 문서 루트에있는 디렉토리에 배치 할 수 있습니다 (때로는 약 3-4 개의 폴더가 적음). 현재 URL을 얻는 방법에 관해서도 시도해 보았습니다. 그러나 현재 URL을 비교할 무언가가있을 수 있도록 파일의 홈 디렉토리를 얻는 방법은 무엇입니까? 예 : 현재 파일은 "public_html/project_folder/another_folder/another_sub_folder/file2.html"에 있습니다. 어떻게 그 중에서 "project_folder"를 얻을 수 있습니까? 파일이 1dir보다 낮 으면 어떻게 될까요? – Nikko

3

를 사용하여 URL을하지 현재 디렉토리.

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

위의 사람에 대한 내 코멘트와 같음 : "HTML 파일을 어디에 두는 지 신경 쓰지 않아도되므로 문서 루트의 디렉토리에 배치 할 수 있습니다. (가끔은 약 3-4 폴더가 낮은 것입니다.). 현재 URL을 얻는 데 관해서는, 나는 또한 그것을 시도했지만 어떻게 현재 URL을 비교할 무언가있을 것이라고 파일의 홈 디렉터리를 어떻게합니까? 예 : 현재 파일은 "public_html/project_folder/another_folder/another_sub_folder/file2.html"에 있습니다. "project_folder를 어떻게 가져올 수 있습니까?"파일이 1dir보다 낮 으면 어떻게 될까요? " – Nikko

+1

웹 루트에서 XML 파일을 참조하는 경우 HTML 파일의 위치는 중요하지 않습니다. XML 파일은 계층 구조에서 폴더를 이동하지 않는 한 항상 참조됩니다. – tvanfosson

+0

주셔서 감사합니다 // 주 슬래시 –

1

코드 복제가 싫어서 같은 문제가있었습니다.

나는이 방법을 알아 냈 :

내 디렉토리 구조 :

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

주의 사항, 정말 .PHP 파일에 자바 스크립트를 가지고!나는 더 낮은 이유를 설명 할 것이다.

나는이 선언 공유 자바 포함 index.php를 에서 :

<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 대신 .php이 나와 있습니다. :

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

내가에서 호출 할 위치에 따라 그 아약스 스크립트의 경로를 변경해야하기 때문에. 그리고 그것은 $ _GET [경로]의 내용입니다. index.php 또는 sub_index.php에 설정합니다. 평소 것처럼 뭔가를 가지게됩니다

ajax_script.php 가 다시 자체에 상대 경로를 사용하는 AJAX 스크립트 :

<?php 
    require("../../../include_db/dbconnect.php"); 
내가 대답을 시도했습니다
관련 문제