Вызов параметров URL в файле .js

Я вызываю файл .js в файле HTML. В URL-адрес файла .js я хочу включить параметр, который будет доступен для кода ВНУТРИ файла .js.

Например:

Я хочу иметь возможность передать значение идентификатора функции в файле jquery_widget.js с помощью jQuery. Как это делается?

Благодарен за всю помощь!


person Jonathan Clark    schedule 24.02.2010    source источник


Ответы (8)


Вы не можете сделать это так: вы должны объявить переменную перед загрузкой скрипта. Пример:

<script type="text/javascript">
    var foo= "bar";
</script>
<script type="text/javascript" href="path/to/js.js"></script>

таким образом, переменная будет готова для вашего скрипта.

Другим решением является использование php-скрипта, который затем может использовать переменную GET. В этом случае убедитесь, что вы сообщаете через вызов header(), что вы выводите javascript

<script type="text/javascript" src="ip.php"></script>

И ip.php

<?
//"ip.php" example- display user IP address on any page
Header("content-type: application/x-javascript");
$serverIP=$_SERVER['REMOTE_ADDR'];
echo "document.write(\"Your IP address is: <b>" . $serverIP . "</b>\")";
?>
person pixeline    schedule 24.02.2010

Вы используете что-то вроде php

your html file:
<script type="text/javascript" src="yourFile.php?var=123">  

yourFile.php:  
// <?php echo($_GET["var"]); ?>

Или вы можете определить глобальную переменную и получить доступ к этой переменной с помощью javascript.

person Warty    schedule 24.02.2010

Подойдите к проблеме иначе:

  1. Включите файл .js
  2. Вызовите функцию, определенную в вашем .js-файле, с параметром (т. е. значением вашего идентификатора).
person Nicolas Viennot    schedule 24.02.2010

Файл javascript сам по себе не знает URL-адреса, с которого он загружается.

Что вы можете сделать, так это присвоить идентификатор тегу script, который вы включаете в HTML-страницу, а затем получить атрибут SRC через jQuery. Анализируя значение URL, вы можете извлечь параметр.

<script id='widgetJs' src='...'></script>

var url = $("#widgetJs").attr("src");
var q = url.split("?")[1];
if (q) {
    var params = q.split("&");
    etc. etc... 
    i'm not even going to explain further because there are better solutions.
}

Более простое решение — объявить глобальную переменную в отдельном теге script (распределите пространство имен, чтобы избежать конфликтов), а затем использовать ее непосредственно в своем скрипте.

Или еще лучше иметь в своем скрипте функцию initialize(param), которую вы вызываете из HTML-файла (это убережет вас от загрязнения глобального контекста ненужными переменными).

person Dan Burzo    schedule 24.02.2010

Файлы HTML и javascript являются статическими ресурсами и будут интерпретироваться только клиентским браузером, поэтому вы не можете передавать какие-либо параметры запроса этим значениям и читать их внутри. Что вы можете сделать, так это динамически генерировать файлы javascript с параметрами на стороне сервера, а затем включить его как часть страницы. Или другой простой способ: напишите свой файл js как файл php или jsp и установите тип содержимого страницы на text/javascript, и вы сможете получить доступ ко всем параметрам внутри него.

person Teja Kantamneni    schedule 24.02.2010

файл cshtml

<script src="@Url.Content("~/_scripts/CustomScripts/Coverage.js")" type="text/javascript"></script>   
@using (Html.BeginForm("Create", "Coverage")) {

}    
<script type="text/javascript">    getTypeIDByCategoryIdUrl = '@Url.Action("GetTypeIDByCategoryId")';  </script>

Покрытие.js

var getTypeIDByCategoryIdUrl = ""; $(function () {
      $('#SeletedParrentIDTypeCode').change(function () {
      alert(getTypeIDByCategoryIdUrl); }
person Kuttan Sujith    schedule 05.11.2011

function getUrlVars()
{
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href
                     .indexOf('?') + 1).split('&');

    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }

    return vars;
}

Источник: http://snipplr.com/view.php?codeview&id=799.

person n00b    schedule 24.02.2010
comment
это не сработает.. он запрашивает параметры url для включения .js.. не для html-страницы.. - person Gabriele Petrioli; 24.02.2010

Если вы пытаетесь прочитать параметры из URL-адреса, я использовал:

function PageQuery(q) {
    if (q.length > 1) this.q = q.substring(1, q.length);
    else this.q = null;
    this.keyValuePairs = new Array();
    if (q) {
        for (var i = 0; i < this.q.split("&").length; i++) {
            this.keyValuePairs[i] = this.q.split("&")[i];
        }
    }
    this.getKeyValuePairs =  function() { return this.keyValuePairs; }
    this.getValue = function(s) {
        for (var j = 0; j < this.keyValuePairs.length; j++) {
            if (this.keyValuePairs[j].split("=")[0] == s)
                return this.keyValuePairs[j].split("=")[1];
        }
        return false;
    }
    this.getParameters = function() {
        var a = new Array(this.getLength());
        for (var j = 0; j < this.keyValuePairs.length; j++) {
            a[j] = this.keyValuePairs[j].split("=")[0];
        }
        return a;
    }
    this.getLength = function() { return this.keyValuePairs.length; }
}
function queryString(key) {
    var page = new PageQuery(window.location.search);
    return unescape(page.getValue(key));
}
function displayItem(key) {
    if (queryString(key) == 'false') {
        document.write("you didn't enter a ?name=value querystring item.");
    } else {
        document.write(queryString(key));
    }
}
person tbone    schedule 24.02.2010