Переменные URL JavaScript - PullRequest
       1

Переменные URL JavaScript

5 голосов
/ 20 октября 2011

у меня

<script type="text/javascript" src="http://doamin.com/js/whatever.js?ref=images"></script>

Обратите внимание на ref=images в конце URL. Мои вопросы: как мне получить переменную ref из URL и использовать ее в этом же файле js.

Ответы [ 8 ]

3 голосов
/ 20 октября 2011

Упрощение идеи Мртшермана, просто найдите сценарий с правильными src (из whatever.js):

var whatever = $('script[src*=http://domain.com/js/whatever.js]')

if (whatever.length){
    var ref = whatever.attr('src').match(/\?ref=(.*)/)
    if (ref && ref[1]){
        ref = ref[1] // ref == 'images'
    }
}

update: , так как вы просто хотите вывести что-то изPHP и использовать его в вашем скрипте, у вас есть гораздо лучший вариант:

<script id="whatever" src="http://domain.com/whatever.js" data-ref="images"></script>

Затем из вашего скрипта (при условии, что jQuery> = 1.4):

var ref = $('#whatever').data('ref') // "images"

Это рекомендуемый истандартный способ получения данных со стороны сервера в ваших клиентских скриптах.

См. http://html5doctor.com/html5-custom-data-attributes/ и http://dev.w3.org/html5/spec/elements.html#embedding-custom-non-visible-data

2 голосов
/ 20 октября 2011

Если whatever.js это просто файл js, вы не можете.

Если это просто запрос URI и использование серверного сценария для вывода содержимого javascript, вы можете получить переменную из параметра get.

Если вы хотите передать переменную в what.js, вы можете просто определить переменную перед включением whatever.js, а затем использовать переменную в whatever.js.

<script type="text/javascript">
<!--// 
  ref = 'images';
//-->
</script>
1 голос
/ 20 октября 2011

попробуйте http://jsfiddle.net/fnE6w/

$("script[src*='ref=']").each(function(){
    var src=$(this).attr("src");
    var start=src.indexOf("ref=");
    var end=-1;


    if(start>0)
        end = src.indexOf("&",start+4);
    if(end==-1) end=src.length-1;    
    alert(src.substring(start+4,end));

});
1 голос
/ 20 октября 2011

Я не знаю, как получить атрибут src только для текущего элемента скрипта блоков. Но вы можете получить все скрипты на странице и затем проанализировать их.

//untested
var scripts = $('script[src]');
//loop through scripts and somehow identify the one that is yours
for (var script in scripts) {
  if (myscript) {
    var refvalue = getRef($(script).attr('src'), 'ref');
  }
}

//gup the parameter
function getRef(url, name) {
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( url );
  if( results == null )
    return "";
  else
    return results[1];
}

Надеюсь, этого достаточно, чтобы продолжить.

0 голосов
/ 21 сентября 2012

На всякий случай, если кому-то там будет интересно что-то подобное, вот пример одного способа отправки больших объемов данных в сценарий без использования AJAX.

<script src="test.js" name="testjs">
{
  "here"    : "is",
  "another" : "way",
  "of"      : "passing",
  "larger"  : "amounts",
  "of"      : "data",
  "to"      : "a script"
}
</script>

Тогда в вашем внешнем test.js скрипте вам просто нужно следующее:

(function(){
  var script = document.scripts.namedItem('testjs'), obj, data;
  if ( script && (data = script.innerHTML) ) {
    if ( typeof JSON != 'undefined' ) {
      obj = JSON.parse(data);
    }
    else if ( typeof jQuery != 'undefined' ){
      obj = jQuery.parseJSON(data);
    }
    /// obj now contains the object representation of your data
    alert(obj);
  }
})();
0 голосов
/ 20 октября 2011

Ваша проблема в том, что вы не можете получить запрос по URL скрипта:

<script src="http://doamin.com/js/whatever.js?ref=images">
     //Want to get the query here, but you can't
</script>

Вы сказали:

I'm using php. ref depends on the generated php variable. I want to pass that variable to the js file. Server side is ok with me. I thought the best way to do it is to put it as a url variable at the end of the js file. But i don't know how to access it. Other methods are ok with me

Давайте вернемся к вашей цели - передать переменную php в скрипт ... Почему бы не передать переменную php странице php, содержащей скрипт? Тогда получите это, используя сценарии, предоставленные другими авторами здесь. Ваш URL к странице PHP, содержащей скрипт:

http://domain.com/ThePHPPageContainingTheScript.php?ref=images

Тогда эта страница содержит скрипт:

<script src="http://doamin.com/js/whatever.js">
     //Get the query from window.location, it's possible!
</script>
0 голосов
/ 20 октября 2011

Кажется, я помню, что в некоторых браузерах есть способ получить тег вызывающего скрипта, но я не могу найти ссылку на него.

Следующее, что лучше всего, это выполнить что-то вроде этого:http://snipplr.com/view/354/

Вы можете найти тег сценария с нужным вам источником, а затем извлечь строку. Будьте осторожны! Если вы установите это значение на основе пользовательского ввода, ваш пользователь может ввести строку запроса, которую ваш сканер может неправильно интерпретировать, создавая риск.Для этого следует использовать тот же тип подхода, который используется для разбора параноидального URL, который используется для обычной строки запроса.

0 голосов
/ 20 октября 2011

Вам понадобится код, подобный следующему. Это получает все после? и разделяет его на массив ключей / пар.

var GETDATA = new Array();

// Get the string that follows the "?" in the window's location.
var sGet = window.location.search;
if (sGet) // if has a value...
{
 // Drop the leading "?"
 sGet = sGet.substr(1);

 // Generate a string array of the name value pairs.
 // Each array element will have the form "foo=bar"
 var sNVPairs = sGet.split("&");

 // Now, for each name-value pair, we need to extract
 // the name and value.
 for (var i = 0; i < sNVPairs.length; i++)
 {
  // So, sNVPairs[i] contains the current element...
  // Split it at the equals sign.
  var sNV = sNVPairs[i].split("=");

  // Assign the pair to the GETDATA array.
  var sName = sNV[0];
  var sValue = sNV[1];
  GETDATA[sName] = sValue;
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...