2013-12-24 3 views
0

Представьте, у меня есть сценарий abc.js, который имеет одну глобальную переменную userid. Несколько запросов AJAX выполняются сразу после его загрузки (это может произойти после или до DOM анализируется браузером). Мне нужен сценарий для разных значений переменных для разных пользователей. Запросы должны выполняться мгновенно после того, как JS доступен. Вот то, что я ищу:Предварительно заданные переменные javascript из параметров URL

  • браузер делает запрос на /js/abc.js?userid=12345
  • Сервер разбирает идентификатор = 12345 и добавляет идентификатор = 12345 к сценарию
  • Сервер возвращает скрипт для пользователя
  • Браузер анализирует скрипт, а userid - 12345, тогда все обрабатывается нормально.

Есть ли способ сделать это с помощью расширения Apache/Lighttpd? Поскольку я не могу положиться на <script>userid=12345</script> в начале документа, как abc.js, скорее всего, будет выполнено до того, как будет оценена оценка userid=12345.

+0

Вы можете установить атрибут теги сценария Src в php-файл и echo javascript – engvrdr

+1

Я не следую логике здесь. Если первый шаг вызывает '/js/abc.js? Userid = 12345', то вы, очевидно, уже имеете доступ к идентификатору пользователя ... –

+0

Логика походила на вызов /js/abc.js.php, который в основном является файловым архивом javascript коды, ответ yent лучше, и PHP-интерпретатору не придется обрабатывать запросы javascript тоже – engvrdr

ответ

1

Вы можете просто использовать PHP для вывода JavaScript переменных в точке перед при вызове abc.js сценария. В этом случае параметр будет передан в основной скрипт PHP (например, на странице). Например:

<script type="text/javascript"> 
var userid = <?php echo $_GET['userid']; ?>; 
</script> 
<script type="text/javascript" src="/js/abc.js"> 

Конечно, вы, вероятно, захотите дезинфицировать значение параметра в PHP перед его использованием.

Здесь abc.js может просто ссылаться на значение userid в глобальном масштабе. Нет необходимости передавать идентификатор пользователя скрипту в URL-адрес и использовать Apache для динамического создания файла js. Фактически, вы, вероятно, не хотите, чтобы этот подход предотвращал оптимальное кэширование браузера в сценарии.

Если вы не хотите PHP участвовать у вас есть другие варианты, чтобы передать эти данные, такие как разборе вариант URI, представленный @yent, HTML5 LocalStorage, печенье и т.д.

+0

Да, это сработало. Я делал именно это, но я их обменивал: внешний JS пришел до установки userid. – Xeos

+1

Для обеспечения безопасности и универсальности я бы рекомендовал использовать json_encode для передачи данных между Javascript и PHP. У меня есть ответ здесь, где подробно описано, как это сделать: http://stackoverflow.com/questions/9136997/best-way-to-pass-data-from-php-to-javascript-for-my-particular-case/ 9137093 # 9137093 – cincodenada

0

Вы можете разобрать window.location.search и установить window свойства:

var p = window.location.search.substr(1).split(/&/); 
if(p.length && p[0]) for(var i=0; i<p.length; i++) { 
    var a = p[i].split(/=/); 
    window[a[0]] = a[1]; 
} 
Смежные вопросы