2012-01-06 2 views
5

До сих пор я знаю два способа передачи PHP-переменных в javascript. Один из них с помощьюПередать переменные PHP в Javascript/jquery

<script> 
     $(document).ready(function() 
      phpvalue=$("#hiddeninput").val() 

     }) 
    </script> 

<input type="hidden" id="hiddeninput" value="phpvalue"> 

А другой является наличие, например, кнопку и с помощью OnClick

<script> 
     function clickf(phpvalue) { 

     } 
    </script> 

<input type="submit" onclick="clickf(<?php echo phpvalue ?>)"> 

Все они работают отлично, но:

  1. Есть ли какие-либо другим способом, который мне не хватает?

  2. Какой из них «лучший»?

  3. Любой шанс, что я могу использовать внутри скрипта или внешних js?

ответ

14
<script> 
    $(document).ready(function() 
     var phpvalue = <?php echo $var; ?> 
    }); 
</script> 
+0

Так что ответ на мой третий вопрос. Но могу ли я использовать это во внешнем js? Спасибо – viper

+1

не будет работать в файле .js, но вы можете просто поместить все ваши javascript в php-файл и передать свои значения php в javascript-переменные и импортировать этот файл php, как обычно, в файл js. Joeri

+0

Я тоже думал об этом, но для этого нужен заголовок, как это правильно? 'header (Content-Type: text/javascript)' – viper

2
<script> 

var javascript_variable = <?php echo $php_variable; ?>; 

</script> 
1

Вместо присвоения значения скрытых входов, вы можете просто генерировать JavaScript непосредственно:

$script = <<<EOT 
<script> 
var phpvalue = $phpvalue; 
</script> 
EOT; 
echo $script; 
0

для верхнего примера вам не нужно использовать Вэла, вы можете использовать любого нравится тебе. Например

phpvalue="myvalue" 

затем в JQuery

$("#hiddeninput").attr("phpvalue"); 
4

Как и другие уже ответили, просто поставить PHP тег везде, где бы вы поместить значение JS, как var foo = <?= $php_value ?>; или var foo = <?php echo $php_value ?>;.

Если вы хотите использовать это во внешнем файле JavaScript, вы должны убедиться, что .js-файлы получают синтаксический анализ PHP. Если это не вариант для вас (например, ваш хост не разрешает его), я предлагаю вам установить значения в теге <script> внутри вашего <head>, а затем просто ссылаться на переменные thos из вашего внешнего JavaScript. В этом случае я бы настоятельно предложил вам использовать их как var app_vars = { foo: <?= $bar ?> }, чтобы не загромождать глобальный объект.

Другим способом было бы вернуть значения через Ajax. Но жизнеспособность этого подхода зависит от вашего варианта использования.

И еще один совет: если вы хотите передать несколько переменных или массивов, там JSON запеченные в PHP, начиная с версии 5.2:

<?php 
    $my_complex_var = array(
     'array' => array('foo', 'bar'), 
     'val2' => 'hello world' 
    ); 
?> 
<script> 
    var my_complex_js_var = <?= json_encode($my_complex_var) ?> 
</script> 
+0

Очень приятно. Один вопрос, но зачем мне нужно пространство имен var? Я этого не понимал! – viper

+0

Также, как упоминалось ранее @garvey, я могу использовать .php вместо .js правильно? – viper

+0

Namespacing помогает вам сохранить свой глобальный объект в чистоте. И поддержание чистоты GO - это просто лучшая практика по тысячам причин. Если это не имеет для вас слишком большого смысла, я бы предложил посмотреть некоторые из разговоров Дугласа Крокфорда. Просто выполните поиск в Google Video для его имени. И да, на самом деле вы можете просто использовать '.php' в качестве расширения файла, и вы можете смешивать JS и PHP там. Или, что еще лучше, '.js.php'. Таким образом, вы все равно будете знать, что происходит в этих файлах. –

Смежные вопросы