Javascript 单击按钮不起任何作用
我正在尝试制作一个程序,从数据库中随机抽取5个单词并将它们插入数组。页面最初会根据需要加载,但单击按钮后不会发生任何事情。没有任何警报会被触发,因此该功能永远不能被输入,但我无法理解为什么。另外,当我第一次尝试在浏览器上运行名称时,我收到一个错误,说名称不是合法的索引(参考第13行),所以关于这一点的建议也很好 lingo.php:Javascript 单击按钮不起任何作用,javascript,php,html,xml,Javascript,Php,Html,Xml,我正在尝试制作一个程序,从数据库中随机抽取5个单词并将它们插入数组。页面最初会根据需要加载,但单击按钮后不会发生任何事情。没有任何警报会被触发,因此该功能永远不能被输入,但我无法理解为什么。另外,当我第一次尝试在浏览器上运行名称时,我收到一个错误,说名称不是合法的索引(参考第13行),所以关于这一点的建议也很好 lingo.php: <?php session_start(); if (empty($_POST["name"])): $_SESSION["er
<?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(响应)})因为这是一种检查前端是否确实从php脚本接收到任何数据的简单、简短的方法。尝试在浏览器中手动获取php脚本,然后查看结果。在谷歌搜索“启用错误报告php”,以防问题与php相关。服务器上的post数据在哪里处理?到处都看不见;我错过了吗?您真的应该使用$。获取?你在哪里定义
<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>