2011-05-24 35 views
3

我想将一个javascript字符串传递给php ...在脚本中,代码后面的WHICH是正确的。将一个Javascript字符串传递给PHP

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

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

这是行不通的。 我该怎么办?

+1

您显然缺乏对PHP和JavaScript,服务器端和客户端之间差异的理解。我建议你在编写任何其他代码之前仔细阅读。 – Nick 2011-05-24 20:13:30

回答

11

当有人访问一个网站,这通常是发生了什么:

  1. 他们的浏览器向服务器发送一个请求。
  2. 服务器评估该请求。
  3. 服务器意识到“Egad,他们正在请求的页面有PHP!”
  4. 服务器评估PHP,并只将结果发送到浏览器。
  5. 浏览器解析它收到的内容。
  6. 浏览器意识到,“我收到的页面有JavaScript!”
  7. 浏览器完全在客户机上评估JavaScript。

因此,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请求缓存响应,所以使独特的网址:

    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浏览器的某些版本
+0

+1正确使用单词“Egad” – Ender 2011-05-24 20:24:39

5

PHP是执行服务器端,而JavaScript是客户端,所以这意味着PHP已经在您发送您的JavaScript代码时执行。

您可能想要考虑AJAX。

+0

好吧...我想不用ajax来做...但是你会如何用ajax做到这一点?代码示例? – 2011-05-24 20:13:11

+1

@ mr.bio无法在PHP中使用JavaScript值(在同一页上),因为PHP已经执行了**。你需要发射另一个HTTP请求。 – Nick 2011-05-24 20:16:04

0

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

你可以通过其他方式,虽然...打印在JavaScript中的PHP值。这是因为脚本不是由服务器端创建的,而是在浏览器正在处理之前发送给客户端。

不知道你试图达到什么,但也许这有所帮助。

-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> 

然后它设置的JavaScript值的PHP值为$myvar,所以它们都保持不变。如果你想要做其他事情,你需要扩展你的例子。

相关问题