将Javascript字符串传递给PHP

时间:2011-05-24 20:07:56

标签: php javascript

我想将一个javascript字符串传递给php ...在脚本代码之后是正确的。

<script type="text/javascript">
  var myvar = "mytext" ;

 <?php echo myvar ; ?>
</script>

这不起作用。 我该怎么办?

4 个答案:

答案 0 :(得分:11)

当有人访问网站时,通常会发生这种情况:

  1. 他们的浏览器向服务器发送请求。
  2. 服务器评估该请求。
  3. 服务器意识到,“Egad,他们要求的页面有PHP!”
  4. 服务器评估PHP,并仅将结果发送到浏览器。
  5. 浏览器会解析收到的内容。
  6. 浏览器意识到,“Egad,我收到的页面有JavaScript!”
  7. 浏览器完全在客户端的计算机上评估JavaScript。
  8. 因此,PHP和JavaScript基本上处于流程的不同端。只有服务器处理PHP,只有客户端处理JavaScript。

    要向PHP“提供”字符串,您必须发出PHP页面的请求,将该字符串作为GET变量发送:

    http://www.yourdomain.com/some_php_page.php?myvar=mytext
    

    使用JavaScript可以通过几种方法实现此目的。

    1. 如果您只关心在PHP页面上发出请求,并且您不需要担心收到任何信息,您可以创建一个图像并使用URL作为源:

      var fakeImg = new Image();
      fakeImg.src = 'http://www.yourdomain.com/some_php_page.php?myvar=mytext';
      

      即使您正在请求图像,服务器也不知道,并将通过调用PHP评估它来处理您的请求等。

    2. 您可以发出实际的AJAX请求。首先创建一个XMLHttpRequest对象:

      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
      

      IE中存在一些针对AJAX请求的缓存响应的问题,因此请将url设为唯一:

      var url = 'http://www.yourdomain.com/some_php_page.php?myvar=mytext&unique=whatever';
      

      告诉你的XHR你想去哪里,以及你希望它如何到达那里:

      xhr.open('GET', url, true);
      // The "true" parameter tells it that we want this to be asynchronous
      

      设置一个方法,检查收到回复的时间:

      xhr.onreadystatechange = function () {
          if (xhr.readyState === 4 && xhr.status < 400) {
              success(xhr.responseText);
          }
      };
      

      最后,发送请求:

      xhr.send(null);
      // We set "null" because some browsers are pissy
      

      要记住的一些注意事项:

      • 您必须自己构建success函数,以处理PHP页面将返回的字符串。
      • 如果你愿意,你可以通过该功能xhr.responseXML,但这对我来说通常只是麻烦。
      • 使用onreadystatechange我的方式(我相信)会在某些版本的IE中引入内存泄漏

答案 1 :(得分:5)

PHP是在服务器端执行而javascript是客户端,因此这意味着当您发送javascript代码时PHP已经执行。

你可能想要研究一下AJAX。

答案 2 :(得分:0)

您应该明确客户端和服务器端代码之间的区别。您在php代码中引入的变量之前未分配,因为该变量是在客户端设置的。所以你的代码示例本质上是错误的。如果您希望客户端(javascript)上存在的值在服务器(php)上可用,则需要使用javascript的xmlhttprequest对象(也称为ajax)执行某些操作。

你可以做相反的方法...在javascript中打印一个php值。这是因为脚本不是在服务器端创建的,而是在浏览器处理之前发送给客户端。

不确定你想要达到的目的但是这可能会有所帮助。

答案 3 :(得分:-1)

你的例子有些令人困惑:

<script type="text/javascript">
  var myvar = "mytext" ;

 <?php echo myvar ; ?>
</script>

因为如果我这样做:

<script type="text/javascript">
  <?php $myvar = "mytext"; ?>
  var myvar = "<?php echo $myvar; ?>" ;
</script>

然后它将myvar的JavaScript值设置为PHP值$myvar,这样它们都保持不变。如果您正在尝试做其他事情,则需要扩展您的示例。