我无法从我的jquery获取数据到php文件。我尝试了多种解决方案,我没有收到任何错误,但数据没有显示在我的数据库中。这是第一次使用ajax。我需要一个外部的php提交代码,因为如果我在我的index.php上包含php代码,那些值会被记住,当我刷新页面时它们会被提交。提前谢谢。
这是我的HTML
<form class="form-inline" method="post" >
<div id="div_id_value" class="form-group">
<input class="numberinput form-control"
id="value" name="value"
placeholder="Value (mmol/L)"
required="True" type="number" step="any" min="0"/>
</div>
<div id="div_id_category" class="form-group">
<select id="id_category" name="category">
<option value="Breakfast">Breakfast</option>
<option value="Lunch" >Lunch</option>
<option value="Dinner">Dinner</option>
<option value="Snack">Snack</option>
<option value="Bedtime">Bedtime</option>
<option value="No Category" selected="selected">No Category</option>
</select>
</div>
<input type="submit" name="submit" value="Quick Add" id="quick">
</form>
这是我的jquery
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js">
$("#quick").click(function() {
var sugar2 = $("#value").val();
var category2 = $("#category").val();
$.ajax({
type:'POST',
url:'quick.php',
data:{ 'sugar': sugar2, 'category':category2},
dataType:'json',
success: function(output) {
alert(output);
};
});
});
这是我的php
<?php
session_start();
include 'conn.php';
if (isset($_POST['sugar'])) {
$sugar = $_POST['sugar'];
$category = $_POST['category'];
$email= $_SESSION['email'];
$query = "INSERT INTO data (email, sugar, category)
VALUES($email, $sugar, $category )";
if(mysqli_query($link, $query)) {
header("Location: index.php");
};
};
?>
答案 0 :(得分:2)
你可以在这里更新很多东西。首先,这里的任何人都很难调试数据不在数据库中的原因。这可能是连接错误,设置错误等。您需要提供错误信息以便我们提供帮助。有了这样说......
首先,我会绑定到提交事件而不是click事件。点击事件不会考虑用户在输入字段上按Enter键。提交事件将同时捕获单击提交按钮,以及通过回车键提交表单。
$("#quick").submit(function(evt) { ... });
//or
$("#quick").on('submit', function(evt) { ... });
接下来,你的AJAX电话。您指定dataType
参数。根据文档,这是告诉jQuery你期望从服务器返回什么。不是您要发送到服务器的内容。因此,在您的情况下,您应该将JSON发送回您的AJAX成功函数,而您不是。我会删除dataType
参数,因为它不是必需的。
最后,成功函数需要响应。在您的PHP文件中,您尝试重定向用户,这在此处不起作用。您需要返回对AJAX函数的响应。这将是一个很好的机会来检查错误,甚至只是调试代码,确保它按预期工作。所以也许是这样的,
<?php
session_start();
include 'conn.php';
if (isset($_POST['sugar'])) {
$sugar = $_POST['sugar'];
$category = $_POST['category'];
$email= $_SESSION['email'];
$query = "INSERT INTO data (email, sugar, category)
VALUES($email, $sugar, $category )";
//save the output of the result
$result = mysqli_query($link, $query);
//according to the docs, mysqli_query() will return false on failure
//check for false
if( $result === false ) {
//the query failed
//provide a response to the AJAX success function
echo "Query failed. Check the logs to understand why, or try enabling error reporting.";
}else {
//the query worked!
echo 'All good!'; //provide a response to the AJAX success function
}
//Kill PHP. Good idea with an AJAX request.
exit;
}
同样,这可能无法解决您的问题,但希望能让您朝着正确的方向前进。
答案 1 :(得分:-1)
你必须从你的PHP脚本返回一个响应到ajax,这将是json或其他格式,但我在你的代码中看到你没有在PHP中回应什么。 但是你的ajax部分它正在编写一些东西放入你的输出变量并发出警报。 试着让你的PHP
ul {
list-style-type: none;
padding: 0;
background-color: #333;
top: 0;
left: 0;
width: 100%;
margin-top: 0px;
margin-bottom: 0px;
position:fixed;
}
li {
float: left;
}
li a, .dropbtn {
display: block;
color: white;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}
li a:hover:not(.active) {
background-color: #111;
text-decoration: none;
color: white;
}
li.dropdown {
display: inline-block;
}
.dropdown-content {
display: none;
background-color: #f9f9f9;
min-width: 160px;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
z-index: 1;
position: absolute;
}
.dropdown-content a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
text-align: left;
}
.dropdown-content a:hover {background-color: #333}
.dropdown:hover .dropdown-content {
display: block;
}
.active {
background-color: #80e5ff;
color: black;
text-decoration: none !important;
}
如果你看到你的警告框意味着你的问题是一些php错误,比如连接或语法。