如何将IRL变量传递给JavaScript

时间:2014-01-09 06:03:34

标签: javascript php jquery

我想将一个URL变量传递给一个警告框,一旦页面加载就会弹出。

网址看起来像http://www.example.com/?state=california

我已经将PHP代码置于我的代码之上以获取变量 -

<?php 
$state = $_GET['state'];  
?>

我的警报框看起来像这样 - 它放在头部。

<script>
$(document).ready(function()
{
alert('Warning!\n\nPlease confirm you are from [the state variable here!]');
});
</script>

通常在PHP中我会放<?=$state?>,但显然它在JavaScript中不起作用。

5 个答案:

答案 0 :(得分:1)

避免使用可能未在您的版本中启用的php短开标记.. See this了解更多

<?php 
   $state = $_GET['state'];  
?>

<script>
  $(document).ready(function() {
     alert('Warning!\n\nPlease confirm you are from <?php echo $state;?>');
  });
</script>

答案 1 :(得分:1)

系统中始终未启用PHP短开标记,因此最好使用<?php ...?>

并且不要忘记转义字符串,因为它可以包含特殊字符,即单引号双引号,它们可能会因意外错误而终止。

<script>
    $(document).ready(function() {
        alert('Warning!\n\nPlease confirm you are from ' + '<?php echo htmlspecialchars($_GET["state"])?>');
    });
</script>

有关详细信息,请参阅htmlspecialchars

答案 2 :(得分:0)

嗯,这完全适用于JavaScript但是!当页面完全加载时,与服务器的连接将关闭,您无法再访问PHP变量。

您必须在第一次完全加载页面时放置变量。

如果在点击某些按钮或页面上的任何交互式操作完成后变量的内容应该更改,则无法在不执行AJAX请求的情况下从PHP收集和更新任何信息(http://api.jquery.com/jquery.ajax/)。

你应该没问题:

<script>
    $(document).ready(function() {
        alert('Warning!\n\nPlease confirm you are from ' + '<?=$_GET["state"]?>');
    });
</script>

答案 3 :(得分:0)

使用addslashes和echo。

如果状态名称中包含addslashes

quotes将避免您的代码中断。

<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<?php
   $state = $_GET['state'];
?>

<script>
  $(document).ready(function() {
     alert('Warning!\n\nPlease confirm you are from <?php echo addslashes($state); ?>');
  });
</script>

答案 4 :(得分:0)

您可以使用纯JavaScript从URL中提取状态。

<script>
$(document).ready(function () {
var query = document.location.search, // get the query string from the URL
  state = /[&?]state=([^&]*)/.exec(query)[1]; // get the state using regex
  alert('Warning!\n\nPlease confirm you are from ' + state);
});
</script>
  • 使用http://www.example.com/?state=california的示例网址,document.location.search将返回?state=california

  • /[&?]state=([^&]*)/是正则表达式文字。此正则表达式会查找?&后跟state=,然后在此之后捕获所有内容,直到它到达&或字符串末尾。

  • 使用RegExp文字的.exec方法将针对提供的字符串运行正则表达式。 .exec返回一个数组,第一个元素(索引0)是整个匹配的字符串'?state=california',第二个元素(索引1)只是捕获括号之间的部分,'california'。语句末尾的[1]从索引1的数组中获取项目,从而将'california'存储在state变量中。

这应该适用于您的情况中的简单单词值。如果您需要在显示字符串之前支持带有空格和非字母数字字符的更长字符串,请执行以下操作:

state = decodeURIComponent(state).replace(/\+/g, ' ');

decodeURIComponent将解码网址编码的字符,而replace将用空格替换网址中的任意+