Pergunta

Eu tenho algum código em um arquivo javascript que as necessidades para enviar consultas de volta ao servidor. A pergunta é: como faço para encontrar o URL para o script que eu estou, para que eu possa construir um url pedido adequado para ajax.

i., O mesmo script está incluído no /, /help, /whatever, e assim por diante, ao mesmo tempo que terá sempre necessidade de pedido de /data.json. Além disso, o mesmo site é executado em servidores diferentes, onde a pasta-/ pode ser colocado de forma diferente. Eu tenho meios para resolver a URL relativa onde eu incluir o Javascript (ez-publicar template), mas não dentro do arquivo javascript si.

Existem pequenos scripts que irão trabalhar em todos os navegadores feitos para isso?

Foi útil?

Solução

Por isso eu gostaria de colocar elementos <link> em <head> da página, que contém as URLs para usar para solicitações. Eles podem ser gerados por sua linguagem do lado do servidor para que eles sempre apontam para o entendimento correto:

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

se torna

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

e pode ser recuperado por Javascript com:

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

Outras dicas

document.location.href lhe dará a URL atual, que você pode então manipular usando funções de cadeia de JavaScript.

Não há nenhuma maneira que o cliente pode determinar a raiz webapp sem ser dito pelo servidor, uma vez que não tem conhecimento de configuração do servidor. Uma opção que você pode tentar é usar o elemento de base dentro do elemento de cabeça, recebendo o servidor para gerar dinamicamente em vez de codificar-lo (por isso mostra o URL relevante para cada servidor):

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

Todos os URLs, então, ser tratados como relativos a esta. Você seria, portanto, basta fazer o seu pedido para /data.json. É, contudo, precisa garantir que todos os outros elos da bear aplicação isso em mente.

Se o script conhece a sua própria nome de arquivo, você pode usar documento. getElementsByTagName (). Percorrer a lista até encontrar o script que corresponde ao seu, e extrair o URL completo (ou relativo) dessa forma.

Aqui está um exemplo:

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') );

Leve em consideração que esta abordagem está sujeita a colisões de nome de arquivo.

I incluem o seguinte código no meu bibliotecas ponto de entrada principal (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 é uma matriz global contendo as opções de configuração. Então site_suffix pode parecer:. "/ Sites_working / thesite / public_html" na sua caixa de desenvolvimento, e apenas "/" em um servidor com um (nome de domínio) host virtual

Este método também é bom, porque se alguém digita o endereço IP da sua caixa de desenvolvimento, ele irá usar o mesmo endereço IP para construir o caminho para a pasta javascript em vez de algo como "localhost", e se você usar " localhost" ele vai usar "localhost" para construir a URL.

E porque também detecta SSL, você não terá que se preocupar com o tempo seus recursos serão enviados através de HTTP ou HTTPS, se você nunca adicionar o suporte SSL para o servidor.

Então, em seu modelo, tanto para uso

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

ou

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

Eu suponho que este último seria mais rápido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top