php没有从jquery的ajax接收数据

时间:2018-05-25 21:56:20

标签: php jquery ajax

我无法从我的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");


          };   
         };
        ?>

2 个答案:

答案 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错误,比如连接或语法。