Ajax后期工作,但PHP无法识别它

时间:2018-03-27 15:05:19

标签: php ajax

我正在尝试使用ajax来存储JavaScript变量,这些变量每隔10秒就会将div中的值传入MySql。但由于某种原因,PHP无法识别我发布的变量。它显示所有变量的未定义索引。我试图使用if(isset($ _ POST ['Joy']))并且错误消失但是从未创建sql查询。 这是HTML代码(注意:HTML最初由Affectiva(https://www.affectiva.com)提供,用于视频流面部情感识别系统。跟随//的代码行来自原始HTML文件。其余的是个人努力将情绪值存储到数据库中,

<head>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://download.affectiva.com/js/3.2/affdex.js"></script>
 </head>
<body>

 <div class="container-fluid"> //
<div class="row"> //
  <div class="col-md-8" id="affdex_elements" //
  style="width:680px;height:480px;"></div> //
  <div class="col-md-4"> //
    <div style="height:25em;"> //
      <strong>EMOTION TRACKING RESULTS</strong><br> //
      Joy <div id="Joy"></div> //
      Sad <div id="Sadness"></div> //
      Disgust <div id="Disgust"></div> //
      Anger <div id="Anger"></div> //
      Fear <div id="Fear"></div> //
    </div> //
    </div> //
    </div> //
    </div> //

<div> //
  <button id="start" onclick="onStart()">Start</button> //
</div> //

这是JavaScript代码,

  var divRoot = $("#affdex_elements")[0]; //
  var width = 640; //
  var height = 480; //
  var faceMode = affdex.FaceDetectorMode.LARGE_FACES; //
  var detector = new affdex.CameraDetector(divRoot, width, height, 
 faceMode); //

  detector.detectAllEmotions(); //
  function onStart() { //
    if (detector && !detector.isRunning) {  //
      detector.start(); //
    } } //

 function log(node_name, msg) { //
    $(node_name).append( msg ) //
  } //

   setInterval(function getElement(){
        var j = Number($("#Joy").text()); //div value
        var s = Number($("#Sadness").text());  //div value
        var d = Number($("#Disgust").text());  //div value
        var a = Number($("#Anger").text());  //div value
        var f = Number($("#Fear").text());  //div value 
  $.ajax({ 
    url: "HTML.php",
    data: {Joy:j,Sadness:s,Disgust:d,Anger:a,Fear:f},
    type: 'POST',
    success : function (){
        alert("sucess");
    }   }); 
  }
    ,10000);

 detector.addEventListener("onImageResultsSuccess", function(faces, image, 
 timestamp) { //

  $("#Joy").html("");$("#Sadness").html("");$("#Disgust").html(""); //
  $("#Anger").html("");$("#Fear").html(""); //

      var joy = JSON.stringify(faces[0].emotions.joy,function(key,val) {
        return val.toFixed ? Number(val.toFixed(0)) : val; //
      });
      var sad = JSON.stringify(faces[0].emotions.sadness,function(key,val) {
        return val.toFixed ? Number(val.toFixed(0)) : val; //
      });
      var disgust = 
     JSON.stringify(faces[0].emotions.disgust,function(key,val) {
        return val.toFixed ? Number(val.toFixed(0)) : val; //
      });
      var anger = JSON.stringify(faces[0].emotions.anger,function(key,val) {
        return val.toFixed ? Number(val.toFixed(0)) : val; //
      });
      var fear = JSON.stringify(faces[0].emotions.fear,function(key,val) {
        return val.toFixed ? Number(val.toFixed(0)) : val; //
        });

      log('#Joy', JSON.parse(joy) );
      log('#Sadness', JSON.parse(sad));
      log('#Disgust', JSON.parse(disgust));
      log('#Anger', JSON.parse(anger));
      log('#Fear', JSON.parse(fear));
  });

我获得了成功警报,但数据库中什么都没有。这是我的PHP代码,

<?php

$conn = mysqli_connect('localhost', 'root', '', 'emotions');

if(isset($_POST['Joy'])){
$Joy =  $_POST['Joy'];
$Sadness = $_POST['Sadness'];
$Disgust = $_POST['Disgust'];
$Anger =  $_POST['Anger'];
$Fear =  $_POST['Fear'];

$sql = "Insert into IPEMOTION (JOY, SADNESS, DISGUST, ANGER, FEAR) values 
($Joy,$Sadness,$Disgust,$Anger,$Fear)";

mysqli_query($conn, $sql); }
?>

我做的一个测试是检查$ _POST ['Joy']的内容,所以我在php中编写了以下代码

if (!isset($_POST['Joy'])){
 echo "Joy is empty";}

运行代码后,我看到前一条消息“Joy is empty”。

2 个答案:

答案 0 :(得分:0)

你的数据不应该那样!

Documentation开始,数据应如下所示:

{variableName: value}

因此,在您的情况下,数据应为:

{Joy:Joy,Sadness:Sadness,Disgust:Disgust,Anger:Anger,Fear:Fear}

没有引号(&#39;)

HTMLNew.php你可以做到:

$joy = $_POST['Joy'];

答案 1 :(得分:0)

我将继续帮助您完成答案部分,因为这是目前最简单的方法。所以你说ajax成功警报正在爆发。然后我认为你的Interval运作不正常。改变这个:

setInterval(function getElement(){
    var j = Number($("#Joy").text()); //div value
    var s = Number($("#Sadness").text());  //div value
    var d = Number($("#Disgust").text());  //div value
    var a = Number($("#Anger").text());  //div value
    var f = Number($("#Fear").text());  //div value 
    $.ajax({ 
        url: "HTML.php",
        data: {Joy:j,Sadness:s,Disgust:d,Anger:a,Fear:f},
        type: 'POST',
        success : function (){
            alert("sucess");
        }           }); 
      },10000);

进入这个:

function getElement(){
var j = Number($("#Joy").text()); //div value
var s = Number($("#Sadness").text());  //div value
var d = Number($("#Disgust").text());  //div value
var a = Number($("#Anger").text());  //div value
var f = Number($("#Fear").text());  //div value 
$.ajax({ 
    url: "HTML.php",
    data: {Joy:j,Sadness:s,Disgust:d,Anger:a,Fear:f},
    type: 'POST',
    success : function (){
        alert("sucess");
    }           
}); 
}

setInterval(function() {
  getElement();
}, 10000);

只是几个问题。要查看您的值是否正确,您可以在PHP脚本中echo $Disgust。然后改变这个:

success : function (){
    alert("sucess");
}

进入这个

success : function (data){
    alert(data);
} 

然后:

<?php

//$conn = mysqli_connect('localhost', 'root', '', 'emotions');

//if(isset($_POST['Joy'])){
$Joy =  $_POST['Joy'];
$Sadness = $_POST['Sadness'];
$Disgust = $_POST['Disgust'];
$Anger =  $_POST['Anger'];
$Fear =  $_POST['Fear'];

echo $Joy;
echo $Sadness;
echo $Disgust;
echo $Anger;
echo $Fear;

//$sql = "Insert into IPEMOTION (JOY, SADNESS, DISGUST, ANGER, FEAR) values 
//($Joy,$Sadness,$Disgust,$Anger,$Fear)";

//mysqli_query($conn, $sql); 
//}
?>

让我知道。我要删除所有过去的答案,直到现在。