$ .ajax POST的响应包括我之前制作的sql INSERT,我不知道为什么

时间:2016-08-10 09:40:41

标签: php jquery ajax

我有一个jquery代码,我的网页用来调用一个在mysql BD中插入一行的php文件。问题是我应该从服务器获取JSON中的数据,但是我收到了我期望的数据但是我将php文件中发送的sql指令也放到了mysql数据库中。为什么呢?

jquery代码:

$("#botoPreReserva").click(function(){
            var dataArribada=$("#dataArribada").val();
            var dataSortida=$("#dataSortida").val();
            var firstname=$("#firstname").val();
            var lastname=$("#lastname").val();
            var email=$("#email").val();
            var message=$("#message").val();
            var req=$.ajax({
              method:"POST",
              url:"comprovardates.php",
              data:{arribada:dataArribada,
                    sortida:dataSortida,
                    firstname:firstname,
                    lastname:lastname,
                    email:email,
                    message:message},
              dataType:"json"


            });

           req.done(function(result){

                if(result.error != "0"){
                    $("#resultatPreReserva").text(result.errorTexte);
                }
                else{
                  $("#resultatPreReserva").text(" ");
                  //posar el calendari a l'inici de la preReserva
                  $.post("nomMes.php", {mesN:result.mesPre },
                    function(result2){
                    $("#mes").text(result2);
                  });
                  $("#any").text(result.anyPre);
                  $("#taulaCalendari").load("calendari.php",{actualmonth:result.mesPre, actualyear:result.anyPre});

                  alert(result.result);
                }

            });
            req.fail(function(jqXHR, textStatus){
              alert(textStatus);


            });

这是一个comprovardades.php简化版:

$calendari= new Calendar(SERVERNAME,DBNAME,USERNAME,PASSWORD);

//conectam a la base de dades
$calendari->connect();

// onsultam reserves d'agost del 2016
$min= new DateTime("2016-11-01");$max= new DateTime("2016-11-31"); $tipus="preReserva"; 
$event = new Event(); $event->setEntrada($min); $event->setSortida($max); $event->setTipus($tipus);

$eventList=$calendari->insertEvent($event);

echo   json_encode(array("error"=>"0","errorTexte"=>"prova","result"=>"result","mesPre"=>"01","anyPre"=>"2016"));

其中connect():

    function connect(){
     try {
      $this->conn = new PDO("mysql:host=$this->servername;    dbname=$this->dbname", $this->username, $this->password);
      // set the PDO error mode to exception
      $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      error_log("Connected successfully");
     }
     catch(PDOException $e)
     {
      error_log("Connection failed: " . $e->getMessage());
     }
    }

其中insertEvent():

function insertEvent(Event $event){

$sql="INSERT INTO reserves(entrada,sortida,tipus,summary)"
        . " VALUES ('".$event->getEntrada()->format('Y-m-d')."','".$event->getSortida()->format('Y-m-d')."','".$event->getTipus()."','".$event->getSummary()."')";
echo $sql;
try{
  $this->conn->exec($sql);
  error_log("SQL:".$sql);
}
catch(PDOException $e)
{
  error_log("INSERT failed " . $e->getMessage());
}

}
}

响应我回到jquery,比如

  

INSERT INTO reserve(entrada,sortida,tipus,summary)VALUES('2016-11-01','2016-12-01','preReserva',''   ){ “错误”: “0”, “errorTexte”: “PROVA”, “结果”: “结果”, “mesPre”: “01”, “anyPre”: “201→6”}

我发现解决这个问题的唯一方法是在php文件中的echo之前使用ob_clean,但我认为它必须是更好的方法。我是一个菜鸟,不知道我是否跳过了某些东西

谢谢,

1 个答案:

答案 0 :(得分:1)

其中insertEvent():

注释掉查询的echo语句

function insertEvent(Event $event){

$sql="INSERT INTO reserves(entrada,sortida,tipus,summary)"
        . " VALUES ('".$event->getEntrada()->format('Y-m-d')."','".$event->getSortida()->format('Y-m-d')."','".$event->getTipus()."','".$event->getSummary()."')";
//echo $sql; // commented this echo 
try{
  $this->conn->exec($sql);
  error_log("SQL:".$sql);
}
catch(PDOException $e)
{
  error_log("INSERT failed " . $e->getMessage());
}

}
}