문제

나는 일부에서 코드를 자바 스크립트 파일을 보낼 필요가 쿼리로 다시 서버입니다.이 질문은 어떻게 찾을 위한 url 은 스크립트는 나에서,그래서 나를 구축할 수 있는 적절한 요청 url 을 위한 ajax.

I.e., 같은 스크립트가 포함되어 있에 /, /help, /whatever, 에,하는 동안 그것은 항상 필요로하는 요구에서 /data.json.또한,같은 사이트에서 실행되는 다른 서버 /폴더에 배치 될 수 있습니다.내가 해결하기 위한 수단의 상대적인 url 을 포함 Javascript(ez-게시 템플릿),지에서 자바스크립트 파일 자체입니다.

이 있는 작은 스크립트를 작동 하는 모든 브라우저에서 만든 이?

도움이 되었습니까?

해결책

이를 위해 내가 좋아를 넣어 <link> 요소로 페이지의 <head>, 이 포함된 Url 을 사용에 대한 요청이 있습니다.그들이 생성될 수 있으로 서버측어 그래서 그들은 항상 포인트 오른쪽에 view:

<link id="link-action-1" href="${reverse_url ('action_1')}"/>

<link id="link-action-1" href="/my/web/root/action-1/"/>

고 검색할 수 있는 자바스크립트로:

document.getElementById ('link-action-1').href;

다른 팁

document.location.href 을 줄 것이다 당신이 현재 URL 할 수 있는 그런 다음 조작을 사용하여 자바 스크립트의 문자열 기능이 있다.

방법은 없는 클라이언트를 확인할 수 있습 웹 애플리케이션 루트 말없이 서버에 의해 그것의 지식은 서버의 구성이 있습니다.옵션 중 하나를 시도 할 수 있을 사용하는 기본 요소의 내부에 머리 요소를 얻을 생성하도록 서버를 동적으로 보다는 오히려 하드 코딩이다(그래서 그것을 보여줍 관련 URL 을 서버):

<base href="http://path/to/webapp/root/" />

모든 Url 은 다음으로 처리에 상대적이다.당신은 따라서 단순히 귀하의 요청/데이터입니다.json.당신은 그러나 필요한지 확인하는 다른 모든 링크는 응용 프로그램에서 부담이 마음입니다.

는 경우 스크립트는 자신의 파일명을 사용할 수 있습 문서입니다.getElementsByTagName().을 반복하고 목록을 찾을 때까지 스크립트에 맞는 당신,추출이 가득(또는 상대)url 는 방법입니다.

예를 들어 다음과 같습니다.

function getScriptUrl ( name ) {
    var scripts = document.getElementsByTagName('script');
    var re = RegExp("(\/|^)" + name + "$");
    var src;
    for( var i = 0; i < scripts.length; i++){
        src = scripts[i].getAttribute('src');
        if( src.match(re) )
            return src;
    }
    return null;
}

console.log( 'found ' + getScriptUrl('demo.js') );

을 고려 사항으로는 이러한 접근 방식은 파일 이름에 충돌 사고로 이어질 수 있습니다.

나는 다음 코드를 포함에서 내 라이브러리의 주요 진입 점(main.php):

/**
 * Build current url, depending on protocal (http/https),
 * port, server name and path suffix
 */
$site_root = 'http';
if (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") 
    $site_root .= "s";
$site_root .= "://" . $_SERVER["SERVER_NAME"];
if ($_SERVER["SERVER_PORT"] != "80")
    $site_root .= ":" . $_SERVER["SERVER_PORT"];
$site_root .= $g_config["paths"]["site_suffix"];

$g_config["paths"]["site_root"] = $site_root;

$g_config 글로벌 포함하는 배열 구성 옵션이 있습니다.그래서 site_suffix 같습니다:"/sites_working/를 담당의사/public_html"에 개발자,그리고 그냥"/"서버에 가상호스트(도메인 이름).

이 방법은 또한 좋기 때문에 누군가가 유형에서 IP 주소의 개발자,그것이 사용하는 동일한 IP 주소를 구축 경로에 자바스크립트 폴더에게"localhost"그리고 사용하는 경우"localhost"사용"localhost"를 구축합니다.

기 때문에 그것은 또한 검 SSL,당신은 당신에 대해 걱정할 필요가 없 날씨는 당신의 자원이 발송될 것입 HTTP 또는 HTTPS 를 통해 만약 당신이 이제까지 추가 SSL 을 지원하여 귀하의 서버입니다.

그런 다음에서의 템플릿을 사용하거나

<link id="site_root" href="<?php echo $g_config["paths"]["site_root"] ?>"/>

<script type = "text/javascript">
var SiteRoot = "<?php echo $g_config["paths"]["site_root"]; ?>";
</script>

난 후자는 빠르게 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top