将vars从php传递给没有ajax的js

时间:2011-04-05 16:36:44

标签: php javascript

让我说我有一个php页面...我希望该页面中的javascript访问一些用户信息变量(登录后),如用户ID,电子邮件等。如果我使用ajax,那么它将需要一个额外的半秒,因为页面必须加载,然后等待ajax去获取那些变量,所以我宁愿将其嵌入页面中,但就安全性而言,在源代码中嵌入电子邮件似乎有问题。

以下是我的选择你能想到更好的方法吗?

1 - 在第一次请求时将数据嵌入到php中

<html>
<script>
    user_email='<?php echo $user_email; ?>';
</script>

2 - 数据加载与js / php文件分开,因此它不在原始页面源

<html>
<script src="userdata.js.php"></script>

--- userdata.js.php ---

user_email='<?php echo $user_email; ?>';

3 - 在页面加载后通过ajax请求数据(会更慢)

<html>
<script>
$(function(){
  $.post('getuserdata.php',[],function(result){
     userdata=result;
  });
});
</script>

5 个答案:

答案 0 :(得分:1)

您可能会考虑的另一个选项是在AJAX加载后使用JSONP异步调用函数。

HTML

<script type="text/javascript">
    function handle_response(response)
    {
        // do whatever you want with the response
        // you get a json object here that looks like
        // { id: 1, username: 'jimmy' }
    }
</script>
<script type="text/javascript src="/path/to/ajax/script.php"></script>

的script.php

<?php
   $arr = array('id' => 1, 'username' => 'jimmy');

   $param = json_encode($arr);

   header("Content-type: text/javascript");
   echo "handle_response({$param})";
   exit;

现在,一旦来自script.php的有效javascript完成加载,它会立即调用您定义的客户端函数。这可以使您的信息远离初始HTML源代码,您甚至可以将该脚本放在https后面,而不会对网站的其余部分执行此操作。

答案 1 :(得分:0)

我总是使用第一步

var myvar = <?php echo $myvar; ?>;

答案 2 :(得分:0)

现在人们已经习惯了ajax,并且说圈子说加载,并不是那么罕见。另一方面,如果你可以嵌入同样好的数据。制作单独的文件甚至更好。你应该注意你提供的信息类型,你可以使用SSL来提高它的安全性。

这三个都是可行的...取决于你试图保护数据的人。调用页面的用户可以通过这种或那种方式访问​​信息......所以请更加可靠地实现。

答案 3 :(得分:0)

出于安全原因,我不喜欢在页面中嵌入信息。在某个时间点,存储不应存在的东西太容易了。你有两个不错的选择出现在我的头顶:

  1. 在页面加载期间执行ajax调用(body onload = ajax调用)(更安全)

  2. 将它们存储在网站的Cookie中(不太安全)

  3. 我通常使用选项#1。

答案 4 :(得分:0)

  
    对于在源代码中嵌入电子邮件的安全性,

似乎有问题。

  

通过ajax检索电子邮件并将其直接嵌入源中遭受同样的安全问题:嗅探流量的人可以收到电子邮件。为避免这种情况,你需要

  1. 首先找出一种不向客户发送电子邮件的方法。
  2. 仅通过https
  3. 将电子邮件地址发送给客户

    我想很多网站都在解决这个问题,并将电子邮件发送给未加密的客户端。