Javascript 单击按钮不起任何作用

Javascript 单击按钮不起任何作用,javascript,php,html,xml,Javascript,Php,Html,Xml,我正在尝试制作一个程序,从数据库中随机抽取5个单词并将它们插入数组。页面最初会根据需要加载,但单击按钮后不会发生任何事情。没有任何警报会被触发,因此该功能永远不能被输入,但我无法理解为什么。另外,当我第一次尝试在浏览器上运行名称时,我收到一个错误,说名称不是合法的索引(参考第13行),所以关于这一点的建议也很好 lingo.php: <?php session_start(); if (empty($_POST["name"])): $_SESSION["er

我正在尝试制作一个程序,从数据库中随机抽取5个单词并将它们插入数组。页面最初会根据需要加载,但单击按钮后不会发生任何事情。没有任何警报会被触发,因此该功能永远不能被输入,但我无法理解为什么。另外,当我第一次尝试在浏览器上运行名称时,我收到一个错误,说名称不是合法的索引(参考第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>

欢迎使用行话,
var-arr=[]; 虚词{ $.post(“getWord.php”, 功能(数据){ arr[word1]=$(数据).find(“word1”).text(); 警报(“达到功能”); 警报(arr[word1]); arr[word2]=$(数据).find(“word2”).text(); 警报(arr[word2]); arr[word3]=$(数据).find(“word3”).text(); 警报(arr[word3]); arr[word4]=$(数据).find(“word4”).text(); 警报(arr[word4]); arr[word5]=$(数据).find(“word5”).text(); 警报(arr[word5]); }); }
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;
?>
=1):
标题('Content-type:text/xml');
回声“;
回声“;
$row=$result->fetch_array();
$ans=$row[“word”];
回音“$ans”;
回声“;
其他:
die(“DB错误”);
endif;
$query=“按兰德顺序从单词中选择单词()限制1”;
$result=$db->query($query);
$rows=$result->num_行;
如果($rows>=1):
标题('Content-type:text/xml');
回声“;
回声“;
$row=$result->fetch_array();
$ans=$row[“word”];
回音“$ans”;
回声“;
其他:
die(“DB错误”);
endif;
$query=“按兰德顺序从单词中选择单词()限制1”;
$result=$db->query($query);
$rows=$result->num_行;
如果($rows>=1):
标题('Content-type:text/xml');
回声“;
回声“;
$row=$result->fetch_array();
$ans=$row[“word”];
回音“$ans”;
回声“;
其他:
die(“DB错误”);
endif;
$query=“按兰德顺序从单词中选择单词()限制1”;
$result=$db->query($query);
$rows=$result->num_行;
如果($rows>=1):
标题('Content-type:text/xml');
回声“;
回声“;
$row=$result->fetch_array();
$ans=$row[“word”];
回音“$ans”;
回声“;
其他:
die(“DB错误”);
endif;
?>

您在
$\u COOKIE[“name”]上得到错误因为在您设置cookie之前,不会设置cookie。在有人输入姓名之前,您不会设置cookie,因此在第一次加载时,它将给出一个错误

“请注意,您不能在PHP中设置cookie,而希望在同一脚本会话中立即检索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 />
现在,您还需要稍微更改
Javascript
端。 这是访问新数组(由php创建)的方式


虚词{
$.post(“getWord.php”,
功能(数据){
警报(数据);//首先显示是否返回了任何数据。谢谢@jDo
var arr=$.parseJSON(数据);
警报(arr.word1);
警报(arr.word2);
警报(arr.3);
警报(arr.4);
警报(arr.5);
});
}

正如您所看到的,这种方式为您节省了大量代码,并为您节省了大量的单词替换

您在
$\u COOKIE[“name”];
上会出现错误,因为所述COOKIE在您设置之前是不会设置的。您在有人输入姓名之前不会设置COOKIE,因此在第一次加载时它会给出一个错误

请注意,您不能在PHP中设置cookie,而希望在同一脚本会话中立即检索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 />
现在,您还需要稍微更改
Javascript
端。 这是访问新数组(由php创建)的方式


虚词{
$.post(“getWord.php”,
功能(数据){
警报(数据);//首先显示是否返回了任何数据。谢谢@jDo
var arr=$.parseJSON(数据);
警报(arr.word1);
警报(arr.word2);
警报(arr.3);
警报(arr.4);
警报(arr.5);
});
}

正如您所看到的,这种方式为您节省了大量代码,并为您节省了大量的单词替换,

您的Javascript是正确的。从Ajax获取响应并检查是否成功返回。如下所示:
$.post(“getWord.php”,函数(数据,响应){console.log(响应)})。另外,您发布的
数据值是多少?我没有看到它在任何地方被定义。我认为这只是正确的语法,我在给我的每一个例子中都看到过它,并且它对我已经开始工作的程序有效,所以我继续把它放在那里。另外,我在函数中添加了这一行,但控制台中没有出现任何内容。这是jquery ajax的正确语法。函数是success函数,(data)是ajax调用返回的数据。你可以给它取任何你想要的名字。您可以将其命名为json或cheese或data,这无关紧要。@BobJones Roy建议您添加
$.post(“getWord.php”,函数(数据,响应){console.log(响应)})$。获取
?你在哪里定义
<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>