Frage

Ich habe einige Codes in einer JavaScript-Datei, die Abfragen senden an den Server zurück muss. Die Frage ist, wie kann ich die URL für das Skript, die ich in bin, so kann ich eine richtige URL für Ajax bauen.

d., Das gleiche Skript auf / enthalten, /help, /whatever, und so weiter, während es immer von /data.json anfordern muß. Darüber hinaus wird die gleiche Stelle auf verschiedenen Servern laufen, wo der /-Ordner anders platziert werden könnten. Ich habe Mittel, um die relative URL zu lösen, wo ich die Javascript (ez-publish Vorlage) umfassen, aber nicht in der JavaScript-Datei selbst.

Gibt es kleine Skripte, die auf allen Browsern gemacht für diese funktionieren wird?

War es hilfreich?

Lösung

Für dieses Ich mag <link> Elemente in der Seite <head> setzen, die URLs enthalten, für Anfragen zu verwenden. Sie können durch Ihre serverseitige Sprache erzeugt werden, so dass sie immer auf der rechten Seite Ansicht Punkt:

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

wird

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

und kann durch Javascript abgerufen werden mit:

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

Andere Tipps

document.location.href finden Sie die aktuelle URL geben, die Sie dann Funktionen Zeichenfolge die mit Hilfe von JavaScript manipulieren kann.

Es gibt keine Möglichkeit, dass der Client die Webapp Wurzel bestimmen können, ohne von dem Server gesagt, als sie keine Kenntnis über die Konfiguration des Servers hat. Eine Option können Sie versuchen, ist das Basiselement im Inneren des Kopfelement zu verwenden, bekommen Sie den Server dynamisch zu generieren, anstatt hartzucodieren es (so zeigt es die entsprechende URL für jeden Server):

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

Alle URLs werden dann als in Bezug auf diese behandelt werden. Sie würden daher einfach Ihre Anfrage machen /data.json. Sie müssen jedoch sicherstellen, dass alle anderen Verbindungen in der Anwendung dies im Auge behalten.

Wenn das Skript einen eigenen Dateinamen kennt, können Sie Dokument verwenden. getElementsByTagName (). Iteration durch die Liste, bis Sie das Skript finden, die Ihnen passt, und extrahieren die volle (oder relative) auf diese Weise url.

Hier ist ein Beispiel:

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

Berücksichtigen Sie, dass dieser Ansatz zu Dateinamen Kollisionen unterliegt.

ich den folgenden Code in meinen Bibliotheken Haupteinsprungspunkt (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 ist ein globales Array Konfigurationsoptionen enthält. So könnte site_suffix wie folgt aussehen: "/ sites_working / thesite / public_html" auf dem Entwicklungsfeld und nur "/" auf einem Server mit einem virtuellen Host (Domain Name)

Dieses Verfahren ist auch gut so, denn wenn jemand Typen in der IP-Adresse Ihres Entwicklungsbox, es die gleiche IP-Adresse verwenden, den Pfad zu den Javascript-Ordnern anstelle von etwas wie „localhost“, zu bauen und wenn Sie " localhost localhost ‚“ wird es verwenden‘, um die URL zu erstellen.

Und weil es auch SSL erkennt, werden Sie nicht befürchten müssen, um über Ihre Ressourcen Wetter werden HTTP- oder HTTPS geschickt werden, wenn Sie jemals die SSL-Unterstützung zu Ihrem Server hinzuzufügen.

Dann in der Vorlage, entweder Verwendung

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

oder

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

ich nehme diese schneller wäre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top