【问题标题】:Using javascript variable in PHP with ajax [duplicate]在带有ajax的PHP中使用javascript变量[重复]
【发布时间】:2014-07-13 20:52:30
【问题描述】:

我正在考虑使用 Speedof.me api 来准确找出用户下载速度。我将使用下载速度的值来确定将使用哪种视频质量将视频流式传输给用户。

<html>
<head>
    <script src="http://speedof.me/api/api.js" type="text/javascript"></script>
</head>
<body>
<h2>SpeedOf.Me API Consumer - Sample Page</h2>
<script type="text/javascript">
    SomApi.account = "SOM5380125e96067";   //your API Key here
    SomApi.domainName = "domain.com";      //your domain or sub-domain here 
    SomApi.config.sustainTime = 2; 
    SomApi.onTestCompleted = onTestCompleted;
    SomApi.onError = onError;
    SomApi.startTest();

     function onTestCompleted(testResult) {
       var speed = testResult.download;
       }
</script>

  <?php 
  //how can i use the speed variable here
}
?>
</body>
</html> 

我是 javascript 的初学者,我想在 php 中使用 javascript 变量,如上所示,无需重新加载页面。我知道 javascript 是在客户端执行的,而 php 是服务器端的,但从我在线阅读的内容来看是 ajax 是要走的路吗。还有一种方法可以存储 speedof.me 的结果,这样我就不需要每次同一个用户观看视频时都运行测试

谢谢你们帮助我

【问题讨论】:

  • 如果您已经知道 Ajax 是一种解决方案,那么您究竟有什么问题呢?如果您不知道如何使用 Ajax,请先阅读教程:learn.jquery.com/ajax。您在代码中有注释“我如何在此处使用变量”这一事实表明您还没有真正理解服务器端和客户端之间的区别。见stackoverflow.com/questions/13840429/…
  • var 答案 = [1, 2, 3, 4, ...];

标签: javascript php jquery ajax


【解决方案1】:

您可以对服务器进行 ajax 调用以使用 php 中的 javascript 变量

function onTestCompleted(testResult) {
   var speed = testResult.download;
   $.ajax({
    url:"link to php script" // e.g test/index.php
    type:"POST",             //method to send data
    dataType:"json",         //expected data from server
    data:{speed:speed},      //data to send server 
    success:function(data){
        alert(data);         //alert response data after ajax call success
        }
    });
   }

在 php 脚本上,您可以在检查 $_POST[] 后使用该 javascript 可变速度

 echo $_POST['speed'];

【讨论】:

    【解决方案2】:

    试试这个:-

    <?php
       echo "<script>alert(speed)</script>";
    ?>
    

    【讨论】:

      【解决方案3】:

      将 PHP 值传递给 javascript 可以被回显。但是 javascript 到 PHP 有点复杂。

      像 PHP 这样的服务器脚本在浏览器脚本(即 javascript)执行其工作之前首先执行。这意味着,在页面加载后,您的 php 将不再有任何好处,除了您使用 Ajax 请求。

      我使用的是 jquery 函数 .post() (如果你想知道我为什么使用 post,你可以自己阅读这些函数,包括 .ajax() 和 .get() )

      /project/execute.php 中某处的 PHP 代码

      $speed = $_POST["speed"];
      echo $speed * 5;
      

      在你的 javascript 中...

      <script type="text/javascript">
      SomApi.account = "SOM5380125e96067";   //your API Key here
      SomApi.domainName = "domain.com";      //your domain or sub-domain here 
      SomApi.config.sustainTime = 2; 
      SomApi.onTestCompleted = onTestCompleted;
      SomApi.onError = onError;
      SomApi.startTest();
      
       function onTestCompleted(testResult) {
         var speedresult = testResult.download;
      
         // here's the magic
         $.post("/project/execute.php", {speed:speedresult}, function(result) {
              alert(result);
         } )
       }
      

      PS。不要忘记在你的部分或身体的最底部导入 JQUERY

      <script src="http://code.jquery.com/jquery-latest.min.js"></script>
      

      【讨论】:

        【解决方案4】:

        这样不行。正如您所说,JavaScript 是客户端。您的 PHP 页面首先由服务器处理——这意味着所有 PHP 代码在您的任何 HTML、CSS 和 JS 之前首先执行。你的 JS 是否位于 PHP 之前并不重要,因为 PHP 将首先被评估。之后,它被发送回客户端,让浏览器处理 HTML、CSS 和 JS。

        对于您的情况,在运行速度测试后,通过 AJAX 将值发送回 PHP 脚本。您可以使用 jQuery 使 AJAX 调用更容易。存储一个cookie using JS 表示测试已经执行过一次。您需要修改您的 JS,以便它检查此 cookie 是否存在并跳过速度测试。

        【讨论】:

          【解决方案5】:

          您似乎不了解客户端代码和服务器端代码之间的根本区别。

          PHP 代码将在服务器端执行;只有输出被发送到浏览器。然后浏览器执行Javascript。

          您的问题的一个解决方案是使用 Javascript 动态加载视频(根据 Ajax 或简单的视频链接命名约定)。要存储速度测试结果,请使用 Cookie。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-07-14
            • 1970-01-01
            • 1970-01-01
            • 2019-05-07
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多