Domanda

Ho un po ' di codice in un file javascript che ha bisogno di inviare una query al server.La domanda è, come faccio a trovare l'url dello script che ho, quindi posso costruire un proprio url di richiesta ajax.

I. e., lo stesso script è incluso nel /, /help, /whatever, e così, mentre sarà sempre bisogno di chiedere /data.json.Inoltre, lo stesso sito è gestito su server diversi, in cui il /-cartella potrebbe essere posizionati in modo diverso.Non ho i mezzi per risolvere l'url relativo, dove io sono il Javascript (ez-publish modello), ma non in javascript file stesso.

Ci sono piccoli script che funziona su tutti i browser fatto per questo?

È stato utile?

Soluzione

Per questo mi piace mettere <link> elementi della pagina <head>, contenente l'Url da utilizzare per le richieste.Essi possono essere generati dal tuo linguaggio server-side in modo da ottenere sempre il punto di vista a destra:

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

diventa

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

e può essere recuperato da Javascript con:

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

Altri suggerimenti

document.location.href ti fornirà l'URL corrente, che potrai quindi manipolare usando le funzioni stringa di JavaScript.

Non è possibile che il client sia in grado di determinare la radice di webapp senza che venga comunicato dal server in quanto non è a conoscenza della configurazione del server. Un'opzione che puoi provare è utilizzare l'elemento base all'interno dell'elemento head, facendo in modo che il server lo generi dinamicamente anziché codificarlo (in modo che mostri l'URL pertinente per ciascun server):

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

Tutti gli URL verranno quindi trattati come relativi a questo. Pertanto, faresti semplicemente la tua richiesta a /data.json. È tuttavia necessario assicurarsi che tutti gli altri collegamenti nell'applicazione tengano conto di ciò.

Se lo script conosce il proprio nome file, è possibile utilizzare il documento. getElementsByTagName (). Scorri l'elenco fino a trovare lo script corrispondente al tuo ed estrai l'URL completo (o relativo) in quel modo.

Ecco un esempio:

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

Prendi in considerazione che questo approccio è soggetto a collisioni di nomi di file.

Includo il seguente codice nel punto di ingresso principale delle mie librerie (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 è un array globale contenente opzioni di configurazione. Quindi site_suffix potrebbe apparire come: & Quot; / sites_working / thesite / public_html & Quot; sulla tua casella di sviluppo e solo " / " su un server con un host virtuale (nome di dominio).

Questo metodo è anche buono, perché se qualcuno digita l'indirizzo IP della tua casella di sviluppo, utilizzerà lo stesso indirizzo IP per costruire il percorso della cartella javascript invece di qualcosa come " localhost, quot; e se usi " localhost " utilizzerà " localhost " per creare l'URL.

E poiché rileva anche SSL, non dovrai preoccuparti del tempo in cui le tue risorse verranno inviate su HTTP o HTTPS se aggiungi mai il supporto SSL al tuo server.

Quindi, nel tuo modello, utilizza

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

o

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

Suppongo che quest'ultimo sarebbe più veloce.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top