【问题标题】:PHP next($array) and JavascriptPHP next($array) 和 Javascript
【发布时间】:2012-10-18 02:26:23
【问题描述】:

我最近开始学习 Web 开发,目前正在开发一个网页,该网页读取文件夹中的许多音频文件,并让用户编写关于她/他所听到内容的文字记录。我几天前开始,我设法通过 php 获取文件列表并通过随机播放数组(让用户实际播放)随机文件(要清楚,每次加载页面时,随机文件都准备好了被播放)。这似乎工作正常。

我还想添加让用户收听下一个/上一个文件的按钮,但是无论何时何地我写next($array) 行它都不起作用,更糟糕的是shuffle 函数也停止工作。我不知道这是否是因为我在标签中使用了 php,但我的直觉告诉我。

我不知道我是否足够清楚,但我会很感激任何帮助。所以这是我的代码:

<html>
  <head>
  </head>
  <body>
    <p align="center">
      <button><-</button>
      <audio src="./Sound data/AAA2028C4_0.wav" type="audio/wav" align="center" id="RandomAudio" controls="controls">
      </audio>
      <button name="nextButton" onClick="next()">-></button>
    </p>

    <script language="JavaScript" type="text/javascript">

      <?php
        //Scan the sound data folder for files
        $dir = './Sound data';
        $files = scandir($dir); 
        $random_file = shuffle($files);
      ?>;

      function load(){
        var test = "./Sound data/<?php
        //Select random element from files array    
        echo $files[$random_file];
        ?>";
        //Play a random file
        document.getElementById('RandomAudio').src=test;
      }

      function next(){
        var next = "./Sound data/<?php
        $next_file = next($random_file);
        echo $files[$next_file];
        ?>";
        //Play the next file
        document.getElementById('RandomAudio').src=next;
      }

      window.onload = load;
    </script>

    <form method="post" action="testecho.php" align="center">
      <strong><label>Transcript : </label></strong>
      <br>
      <textarea name ="transcript" rows="2" cols="40"> </textarea>
      <input type="submit" />
    </form>
  </body>   
</html>

【问题讨论】:

  • 查看网站生成的代码。它看起来正确吗?另外:next 已经返回下一个值。所以你可以立即使用它的返回值。

标签: php javascript html next


【解决方案1】:

对于您使用的每个功能,请查看手册。这有助于习惯它们。

我们来看看:

$random_file = shuffle($files);

shuffle 函数返回TRUEFALSE。因此,$random_file 变量仅在数组 $files 是否已成功洗牌时提供信息。

echo $files[$random_file];

因此完全是假的。 $files 已被洗牌并且 $random_fileTRUEFALSE。但数组键是整数字符串。

我很确定你知道如何解决这个问题。

next类似:

$next_file = next($random_file);
echo $files[$next_file];

即使$next_file 已经是下一个文件,如果$random_file 本来是洗牌的$files 数组(它不是,见上文),也没有必要在下一行中使用它作为键:

echo $files[$next_file];

这没有任何意义。一步一步地编写你的代码。使用像var_dump 这样的调试功能来显示发生了什么。仔细检查您当前使用的函数的 PHP 手册。然后逐行编写代码,你很快就准备好了,学到了很多东西。

不要盲目飞行。在每个函数调用之前和之后打印出来,检查你期望函数做的事情是否真的完成了。

【讨论】:

  • 非常感谢!老实说,我没有想到 shuffle 会返回一个布尔变量。
  • 再次感谢这真的很有帮助,但现在我只能访问下一个索引。我的意思是指针仅在 nextelem 函数中以某种方式更改一次。我尝试了很多东西,但似乎无法找出问题所在。
  • function nextelem(){ var nextElement = "./Sound data/"; //播放下一个文件 document.getElementById('RandomAudio').src=nextElement; document.getElementById('position').innerHTML= nextElement; }
  • 函数现在看起来像这样抱歉,它在评论中不太可读。有什么建议可以给我吗?
【解决方案2】:

您不能这样做,因为 PHP 部分将在页面加载时运行一次。 尝试将 PHP 数组转换为 JSON 并直接从 JS 中使用,无需 PHP。

【讨论】:

    【解决方案3】:

    您与 PHP 内置函数 next 有冲突。换个名字试试吧。

    【讨论】:

      猜你喜欢
      • 2012-10-22
      • 2015-02-10
      • 2011-07-12
      • 2020-04-26
      • 2012-11-06
      • 2011-08-09
      • 2011-04-01
      相关资源
      最近更新 更多