将Javascript字符串传递给PHP

mr.*_*bio 3 javascript php

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

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

 <?php echo myvar ; ?>
</script>
Run Code Online (Sandbox Code Playgroud)

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

sdl*_*rhc 11

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

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

所以PHP和JavaScript基本上处于流程的不同端.只有服务器处理PHP,只有客户端处理JavaScript.

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

http://www.yourdomain.com/some_php_page.php?myvar=mytext
Run Code Online (Sandbox Code Playgroud)

使用JavaScript有几种方法可以做到这一点.

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

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

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

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

    var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
    
    Run Code Online (Sandbox Code Playgroud)

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

    var url = 'http://www.yourdomain.com/some_php_page.php?myvar=mytext&unique=whatever';
    
    Run Code Online (Sandbox Code Playgroud)

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

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

    设置一个方法,检查收到响应的时间:

    xhr.onreadystatechange = function () {
        if (xhr.readyState === 4 && xhr.status < 400) {
            success(xhr.responseText);
        }
    };
    
    Run Code Online (Sandbox Code Playgroud)

    最后,发送请求:

    xhr.send(null);
    // We set "null" because some browsers are pissy
    
    Run Code Online (Sandbox Code Playgroud)

    请记住一些注意事项:

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


dee*_*see 5

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

你可能想要研究一下AJAX.