为什么数据没有从ajax传递到php

why is data not being passed from ajax to php

本文关键字:php ajax 数据 为什么      更新时间:2023-09-26

我使用以下表单

<form id="dataForm" method="post">
  <h2 id="formheader"> Update Description</h2>
    <div>
      <label>Product Name:</label>
      <input class="inputForm" id="orginalName" type="text" name="Name">
    </div>
    <div>
      <label>New Description:</label>
      <input class="inputForm" id="newDescription" type="text" name="description">
    </div>
    <div id="theSubmit">
      <button id="editDesButton">Submit</button>
    </div>
  </form>
</section>

以及以下javascript函数

function editDescription(){
    xmlhttp = new XMLHttpRequest();
    var name = document.getElementById("orginalName");
    var Description = document.getElementById("newDescription");
    var data_seen = false;
        // this is a flag to record whether any data has been seen. Used in the guard ofthe alert statement.
    if (name.value !="" && Description.value !=""){
        data_seen = true;
        xmlhttp.open("POST","editDescription.PHP",true);
        xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        xmlhttp.send("Name=" + name.value + "&Description=" + Description.value);
    }
    if (!data_seen) {
        alert("please enter some data");
    }
   }
submitButton = document.getElementById("editDesButton");
submitButton.addEventListener("click", editDescription);

和这个php 的小部分

$Name = $_POST['Name'];
     $Description = $_POST['description'];
     if($Name !="" && $Description !=""){
     $sql = "UPDATE PRODUCTS SET P_Description = '$Description' WHERE P_NAME = '$Name'";
     $conn->exec($sql); 

如果我运行表单并使用action="editDescription.php,那么sql就会运行,表也会按照我想要的方式更新,但当我在事件上运行javascript时,当点击按钮时,值不会被传递,我不明白为什么,有人得到了指针吗?

当您使用提交功能时,浏览器会(正确地)对字段进行url编码。在你的js代码中,你没有进行url编码。在大多数情况下,如果您在字段或任何其他需要编码的字符中输入空格,它将失败。第二件事,在下面的行中,您必须使用小写的"d"作为"description"字段。PHP区分大小写。(我建议您始终使用小写字段名称以避免错误)

尝试:

 xmlhttp.send(encodeURI("Name=" + name.value + "&description=" + Description.value));

也许还有更多的问题。正如Pierre Emmanuel所说,使用javascript控制台,特别是"网络"选项卡,可以准确地监视您通过网络发送的内容。例如,您还可以查看使用var_dump($_POST);接收的PHP是什么。(如果第一个命令失败,则为var_dump(file_get_contents("php://input"));。)

将您的javascript代码更改为jQuery:

function editDescription(){
var name = $('#orginalName').val();  //getting input field value
var description= $('#newDescription').val(); //getting input field value
$.ajax({//create an ajax request to Your.php
type: "POST",
url: "Your.php",   //your php file name
data:{"name ":name,"description":description},
success: function(data) {
    if (data) {
       alert(data);
    }
    else {
        alert('Successfully not posted.');
    }
}
});
}
submitButton = document.getElementById("editDesButton");
submitButton.addEventListener("click", editDescription);

Your.php

 $Name = $_POST['name'];
 $Description = $_POST['description'];
 if($Name !="" && $Description !=""){
 $sql = "UPDATE PRODUCTS SET P_Description = '$Description' WHERE P_NAME = '$Name'";
 $conn->exec($sql);