1

我正在尝试从循环的 PHP 变量中提取一个字符串,并在它使用 jQuery 更新到 div 时将其加载。

问题是,它只是在满足条件时将我重定向到 PHP 页面,而不是从中提取信息并将该信息放在主 html 页面上的 div 中。

我也试图将 div 中的字符串放入 JavaScript 函数responsiveVoice.speak("string");中,但这也不起作用。

我正在努力使我的问题尽可能清晰地格式化,并且我已经遵循堆栈溢出建议以达到我的最佳理解。我试图提出好的问题,但过去我没有受到其他问题的欢迎。

编辑:修复了结束脚本标签和正文标签的位置。它不再有重定向到PHP页面的问题,但它仍然没有运行TTS。它有一个新问题;它不是根据更改刷新单个回声,而是一遍又一遍地打印回声。

这是 index.html 文件:

<html>
    <head>
    </head>
    <body>

        <script src="http://code.responsivevoice.org/responsivevoice.js"></script>
        <script>
            var speek = document.getElementById("load_updates");
            responsiveVoice.speak(speek);
        </script>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/
libs/jquery/1.3.0/jquery.min.js"></script>
        <script type="text/javascript">
            var auto_refresh = setInterval(
            function ()
            {
                $('#load_updates').load('new3.php').fadeIn("slow");
            }, 10000); // refresh every 10000 milliseconds
         </script>

                <div id="load_updates"></div>


    </body>
</html>

这是背景循环new3.php文件:

<?php 
    for($z=0;$z<2880;$z++) {                
        $frog = "15";
        $tent = "2";            
        if ($frog >= $tent) {
            echo "+ frog!";
            echo  "tent";
            $sayit = "Hello! plus frog tent";               
        }   
    }  
?> 

为了简洁起见,我删除了 PHP 循环中发生变化的部分。

4

1 回答 1

0

根据ResponsiveVoice.JS API, speak 方法采用字符串参数(以及可选的语音和选项参数)。

说话(字符串文本,[字符串语音],[对象参数])

开始以给定的声音朗读文本。text : String 要说 的文本。voice : String 默认为“UK English Female”。从可用的 ResponsiveVoices 中进行选择。parameters : Object 用于添加可选的音高(范围 0 到 2)、速率(范围 0 到 1.5)、音量(范围 0 到 1)和回调。 音高、速率和音量可能不会影响某些浏览器组合上的音频,例如 Windows 上的旧版 Chrome。 1






您的示例中的代码正在传递对 DOM 元素(即var speek = document.getElementById("load_updates");)的引用。使用.innerHTML.text()等传递该元素的文本内容。

所以这一行:

responsiveVoice.speak(speek);

可以更新为:

responsiveVoice.speak(speek.innerHTML);

或者使用 jQuery 方法:

responsiveVoice.speak($(speek).text());

这也可以简化为以下内容,这将使上面的行变得不必要:

responsiveVoice.speak($('#load_updates').text());

请参阅此PHPFiddle中的演示- 只需单击标有“运行 - F9 ”的按钮。

phpFiddle 上的演示示例使用相同的文件名来发送异步请求(即$('#load_updates').load('),因为在 phpfiddle 上似乎不可能有多个文件。

它还利用$(document).ready()来确保 DOM 在代码开始与其中的元素交互之前准备好。另请注意,对.load( )的调用将调用函数speakInnerHTML()作为第二个参数传递,因此新文本将在加载后被朗读。

更新:

由于.load()在将对象作为第二个参数传递时将请求作为 POST 发送,因此我更新了 phpFiddle 上的示例以传递一个简单的对象。

$('#load_updates').load('<?php echo $_SERVER['PHP_SELF'];?>', {postData: 1}, speakInnerHTML).fadeIn("slow");

然后在 PHP 代码中,检查该 POST 数据:

if (isset($_POST['postData'])) {
    echo date('Y-m-d h:i:s');

1 https://responsivevoice.org/api/

于 2017-03-14T00:20:28.423 回答