javascript - 单击按钮不执行任何操作

标签 javascript php html xml

我正在尝试编写一个程序,从数据库中随机获取 5 个单词并将它们插入到数组中。页面最初按需要加载,但单击按钮后没有任何反应。没有任何警报被触发,因此绝不能输入该功能,但我不明白为什么。另外,当我第一次尝试在浏览器上运行它时,我收到一条错误消息,指出 name 不是合法索引(引用第 13 行),因此有关该问题的建议也很好。

lingo.php:

<?php
    session_start();
    if (empty($_POST["name"])):
       $_SESSION["error"] = "You did not enter a name.";
       header("Location: entername.php");
    else:
       $name = $_POST["name"];
       setcookie("name", "$name", time()+3600);
    endif;
?>
<html>
  <head>
    <b>Welcome to Lingo, <?php echo $_COOKIE["name"]; ?></b><br />
    <script src = "http://code.jquery.com/jquery-latest.js"></script>
    <script type = "text/javascript" language = "javascript">
    var arr = [];
    function collectWords() {
        $.post("getWord.php",
    function(data) {
        arr[word1] = $(data).find("Word1").text();
        alert("function reached");
        alert(arr[word1]);
        arr[word2] = $(data).find("Word2").text();
        alert(arr[word2]);
        arr[word3] = $(data).find("Word3").text();
        alert(arr[word3]);
        arr[word4] = $(data).find("Word4").text();
        alert(arr[word4]);
        arr[word5] = $(data).find("Word5").text();
        alert(arr[word5]);
    });
    }
    </script>
  </head>
  <body>
    <table id = "theTable" border = "1" class = "thetable"> </table>
    <input type = "submit" value = "Start" onclick = "collectWords()">
  </body>
</html>

getWord.php

<?php
   $db = new mysqli('localhost', 'spj916', "cs4501", 'spj916');
   if ($db->connect_error):
      die ("Could not connect to db " . $db->connect_error);
   endif;

   $query = "select word from Words order by rand() limit 1";
   $result = $db->query($query);
   $rows = $result->num_rows;
   if ($rows >= 1):
      header('Content-type: text/xml');
      echo "<?xml version='1.0' encoding='utf-8'?>";
      echo "<Word1>";
      $row = $result->fetch_array();
      $ans = $row["word"];
      echo "<value>$ans</value>";
      echo "</Word1>";
   else:
      die ("DB Error");
   endif;

   $query = "select word from Words order by rand() limit 1";
   $result = $db->query($query);
   $rows = $result->num_rows;
   if ($rows >= 1):
      header('Content-type: text/xml');
      echo "<?xml version='1.0' encoding='utf-8'?>";
      echo "<Word2>";
      $row = $result->fetch_array();
      $ans = $row["word"];
      echo "<value>$ans</value>";
      echo "</Word2>";
   else:
      die ("DB Error");
   endif;

   $query = "select word from Words order by rand() limit 1";
   $result = $db->query($query);
   $rows = $result->num_rows;
   if ($rows >= 1):
      header('Content-type: text/xml');
      echo "<?xml version='1.0' encoding='utf-8'?>";
      echo "<Word3>";
      $row = $result->fetch_array();
      $ans = $row["word"];
      echo "<value>$ans</value>";
      echo "</Word3>";
   else:
      die ("DB Error");
   endif;

   $query = "select word from Words order by rand() limit 1";
   $result = $db->query($query);
   $rows = $result->num_rows;
   if ($rows >= 1):
      header('Content-type: text/xml');
      echo "<?xml version='1.0' encoding='utf-8'?>";
      echo "<Word4>";
      $row = $result->fetch_array();
      $ans = $row["word"];
      echo "<value>$ans</value>";
      echo "</Word4>";
   else:
      die ("DB Error");
   endif;

   $query = "select word from Words order by rand() limit 1";
   $result = $db->query($query);
   $rows = $result->num_rows;
   if ($rows >= 1):
      header('Content-type: text/xml');
      echo "<?xml version='1.0' encoding='utf-8'?>";
      echo "<Word5>";
      $row = $result->fetch_array();
      $ans = $row["word"];
      echo "<value>$ans</value>";
      echo "</Word5>";
   else:
      die ("DB Error");
   endif;
?>

最佳答案

您在 $_COOKIE["name"]; 上收到错误,因为在您设置该 cookie 之前它不会被设置。在有人输入姓名之前,您不会设置 cookie,因此在第一次加载时会出现错误。

http://www.thesitewizard.com/php/set-cookies.shtml “请注意,您无法在 PHP 中设置 cookie,并希望在同一脚本 session 中立即检索 cookie。以以下不工作的 PHP 代码为例:”

在标题下找到:“如何获取 cookie 的内容。

使用简写 if 语句修复此问题,如下所示:

<b>Welcome to Lingo,
 <?php isset($_COOKIE["name"]) ? $_COOKIE["name"] : $_POST["name"]; //Checks if the cookie is set. If not, uses the $_POST name ?>! </b><br />

我还有一个问题: 为什么一次只要求你说 1 个字?为什么不在 1 个查询中获取所有 5 个单词?另外,为什么将它们作为 XML 数据发送回来?由于您似乎自己处理数据,因此我个人建议在 PHP 端使用一个简单的循环,将其作为方便的预制 JSON 数组返回。 编辑:同样重要的是,PHP 不会自动回显任何内容。 AJAX 调用只能接收打印数据。您需要在 php 脚本末尾回显结果,否则您将不会返回任何内容

像这样:

   $query = "select word from Words order by rand() limit 5";
   $result = $db->query($query);
   $rows = $result->num_rows;
   $array = array();
   if ($rows >= 1):

$i = 0;//start the wordcount
//While there are results, loop. (Results are limited to 5, so it won't loop more than 5 times)
while($row = $result->fetch_row()){
  $i++;//Put this on top so it starts with "1"
  $array["word$i"] = $row[0]; //create the array
}
echo json_encode($array); //Turn array into json and echo it.
      else:
      die ("DB Error");
   endif;

现在,您还需要稍微更改您的 Javascript 方面。 这是您访问新数组(由 php 创建)的方式

<script type = "text/javascript" language = "javascript">
function collectWords() {
    $.post("getWord.php",
function(data) {
alert(data); // show whether you get any data back in the first place. thanks @jDo
var arr = $.parseJSON(data);

    alert(arr.word1);
    alert(arr.word2);
    alert(arr.word3);
    alert(arr.word4);
    alert(arr.word5);
});
}
</script>

如您所见,这种方式可以为您节省大量代码,并节省大量单词替换

关于javascript - 单击按钮不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36524364/

相关文章:

javascript - react 日期选择器 "Unable to preventDefault inside passive event listener invocation"

c# - 从服务器端调用 Javascript 函数

Javascript 代码拒绝在 PHP 之前加载

php - data.push 不适用于 jquery

javascript - 如果上一个为空,则清除下一个嵌套选择标签

jquery - 使用 YouTube Data API 获取视频时长?

javascript onchange事件到asp.net下拉列表

Javascript在点击和重新加载页面上编辑cookie的部分值

php - INNER JOIN 中 SELECT IF 的 Mysql 结果

javascript - 为什么没有数据消息显示? (试图创建谷歌图表)