我的页面如何工作:
quiz.js
中的函数生成了分数。然后将分数保存在score
内的变量quiz.js
sendData.php
中的sql查询一起发送到我的数据库,而无需重新加载页面。我的按钮如下:
<form id="sendData" action="sendData.php" method="post">
<button type="submit" name="send" onclick="sendAjax()">Send</button>
</form>
sendData.php
已经完成并且可以工作,但是由于某些原因,sendAjax()根本无法工作:
function sendAjax() {
$.ajax({
url: "sendData.php",
type: "POST",
data: {
score: score,
numQuiz: numQuiz
},
success: function() {
alert("Data succesfully sent");
},
error: function() {
alert("There has been an error");
}
})
}
我的PHP文件如下:
if (isset($_POST['score']) and isset($_POST['numQuiz'])) {
$score = $_POST['score'];
$numQuiz = $_POST['numQuiz'];
// SQL query and stuff goes here
}
但是似乎未设置$_POST['score']
和$_POST['numQuiz']
。此外,在加载PHP文件之前,我可以看到sendAjax
内部弹出错误。我尝试将属性action=""
添加到表单中,但是它也不起作用。
答案 0 :(得分:2)
<form id="sendData" action="sendData.php" method="post"> <button type="submit" name="send" onclick="sendAjax()">Send</button> </form>
单击表单中的提交按钮时,您正在运行JS。
因此JS运行,然后浏览器立即导航到新页面(将其中没有数据的表单提交给PHP),并且XMLHttpRequest对象在收到响应之前被销毁。
然后您将看到标准表单提交的结果。
如果您只希望按钮触发一些JavaScript,请使用非提交按钮(<button type="button"
),并且不要将其放在表单中。
更好:
onclick
属性(它们有很多问题),而赞成addEventListener
在表单上提供submit
事件监听器preventDefault()
停止提交表单答案 1 :(得分:-1)
两件事:
您需要告诉jQuery使用application / json内容类型:
function sendAjax() {
$.ajax({
url: "sendData.php",
type: "POST",
contentType: 'application/json',
dataType: 'json',
data: {
score: score,
numQuiz: numQuiz
},
success: function() {
alert("Data succesfully sent");
},
error: function() {
alert("There has been an error");
}
})
}
PHP的$ _POST变量未按您认为的那样进行填充,因为有效载荷没有按照标准格式(例如提交表单)进行urlencode编码。因此,我们可以使用以下方式解析JSON有效负载(正文):
$myData = json_decode(file_get_contents("php://input"));
var_dump($myData->score);