Ajax发布失败并显示php文件

时间:2019-08-15 08:15:58

标签: javascript php html ajax

我正在尝试将PHP API与Ajax结合使用以创建新的联系人。当我想将postContact.php文件与ajax一起使用时,每次查询都会失败,但是如果我直接在浏览器中编写发布网址,它将起作用。

我查看了Internet,但没有找到解决方案。

  • 我直接在php函数中查看
  • 我检查数据格式是否正确
  • 我直接在ajax代码中输入数据
  • 我更改contentType和dataType
  • 在这里发布之前,我看过jQuery Ajax POST example with PHP
  • 我删除了数据类型和内容类型
  • 我通过“ POST”更改this.method,并通过api的url更改this.action

HTML表单以添加联系人

<form id="addContact_form" action="php/postContact.php" method="POST">
    <div class="modal-body">
        <div class="form-group">
            <label>Nom</label>
            <input id="addContact_nom" name="nom" type="text" class="form-control" required/>
         </div>
         <div class="form-group">
             <label>Prénom</label>
             <input id="addContact_prenom" name="prenom" type="text" class="form-control" />
         </div>
         <div class="form-group">
             <label>Fonction</label>
             <input id="addContact_fonction" name="fonction" type="text" class="form-control" />
         </div>
         <div class="form-group">
             <label>Téléphone</label>
             <input id="addContact_tel" name="telephone" type="number" class="form-control" />
          </div>
          <div class="form-group">
              <label>Adresse Mail</label>
              <input id="addContact_mail" name="couriel" type="email" class="form-control" />
          </div>
          <label>Lycée</label>
          <!--this is filled with an ajax function when the modal show up-->
          <select id="addContact_lycee" name="id_lycee" class="custom-select" required>
              <option selected>Sélectionner un lycée</option>
           </select>
    </div>
    <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
         <button type="submit" class="btn btn-perso-success">Save changes</button>
    </div>
 </form>

Ajax AddContact

$("#addContact_form").submit(function(event){

  $('#addContactDialog').modal('hide');
  loader('show','Sauvegarde en cours');

  event.preventDefault();

  console.log(this.action+$(this).serialize()); //this print https://..../php/postContact.phpnom=charle%20&prenom=edouard&fonction=eleve&telephone=0000&couriel=sdf%40dfg.g&id_lycee=2

  $.ajax({
    method: this.method,
    url:  this.action,
    data: $(this).serialize(),
    error: function(jqXHR, textStatus, errorThrown){
      loader('hide');
      errorAlert(errorThrown); 
    },
    success: function (data) {
      loader('hide');
      var message = data.message;
      if(message.indexOf('failed') != -1){
        errorAlert(data.message);
      }else{
        successAlert(data.messages);
      }
    }
  });
});

ajax调用的php文件

这不是我的,所以我真的不知道它是如何工作的

<?php
// required headers
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");

// get database connection

include_once 'lycee.php';
include_once 'bdd.php';

$bdd = getConnexion();
$lycee = new lycee($bdd);
// get posted data
$nom = $_GET['nom'];
$prenom = $_GET['prenom'];
$fonction = $_GET['fonction'];
$telephone = $_GET['telephone'];
$couriel = $_GET['couriel'];
$id_lycee = $_GET['id_lycee'];


$lycee->postContact($nom, $prenom, $fonction, $telephone, $couriel, $id_lycee);

?>

函数PostContact()

public function postContact($nom, $prenom, $fonction, $telephone, $couriel, $id_lycee){
        $req2 = $this->conn->prepare ('SELECT * FROM contact WHERE lycee_contact=:id_lycee');
        $req2->execute(array('id_lycee' => $id_lycee));
        $donnees2 = $req2->fetchAll();
        $num = count($donnees2);
        //if alerady a contact to this entry -> update
        if($num > 0){
            $req = $this->conn->prepare('UPDATE contact SET nom=:nom, prenom=:prenom, fonction=:fonction, telephone=:telephone, couriel=:couriel WHERE lycee_contact=:id_lycee');
        $result = $req->execute(array('nom' => $nom, 'prenom' => $prenom, 'fonction' =>$fonction, 'telephone'=>$telephone, 'couriel'=>$couriel, 'id_lycee' => $id_lycee));
            if($result){
            echo '{';
                 echo '"message": "Contact a été sauvegardé"';
                echo '}';

            }else{
                echo '{';
                 echo '"message": "Une erreur est survenue, modification échoué"';
                echo '}';
            }
        }else{ //cerate contact
            $req = $this->conn->prepare('INSERT INTO contact SET nom=:nom, prenom=:prenom, fonction=:fonction, telephone=:telephone, couriel=:couriel, lycee_contact=:id_lycee');
            $result = $req->execute(array('nom' => $nom, 'prenom' => $prenom, 'fonction' =>$fonction, 'telephone'=>$telephone, 'couriel'=>$couriel, 'id_lycee' => $id_lycee));
            if($result){
                echo '{';
                    echo '"message": "Contact a été sauvegardé"';
                echo '}';
            }else{
                echo '{';
                 echo '"message": "Une erreur est survenue, création échoué"';
                echo '}';
            }
        }
    }

执行ajax方法时,它会转到成功回调,但会返回api的错误消息,并且不会添加数据

我希望ajax函数从api调用执行postContact.php文件以保存联系人

1 个答案:

答案 0 :(得分:1)

感谢arkuuu,我解决了我的问题。

他的答案:

  

您的表单显示method =“ post”,但是php尝试从$ _GET获取值。尝试>将$ _GET ['...']更改为$ _POST ['...']

我遵循他的指示,现在可以了