使用Ajax从Ajax获取数据?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (30)

对不起,如果多次询问,但我无法让它工作。我正在尝试建立一个宁静的网站,我有一个简单的形式:

<form action="/my/path" method="post" id="myformid">
Name <input type="text" name="name">
<input type="submit" value="Test">
</form>

我使用Javascript转换用户输入的数据,然后使用Ajax将它们发送到我的php文件:

function postData() {
    $('#myformid').on('submit', function(event) {
        event.preventDefault();
        const json = JSON.stringify($("#myformid").serializeArray());
        $.ajax({
            type: "POST",
            url: "/my/path",
            data: json,
            success: function(){},
            dataType: "json",
            contentType : "application/json"
        });
    });
}

我尝试在php上读取数据:

$data = json_decode(file_get_contents('php://input'), true);
$name = $data["name"];

如果我使用像Postman这样的工具在请求体中发送JSON,代码可以正常工作,但是从我使用Ajax测试的json数据作为POST数据到达,我可以使用$ _POST [“name”]读取它,但是非用'php://输入'就像我一样。

如何修复它以便即使通过Javascript发送也可以接受JSON?

提问于
用户回答回答于

你可以试试这样:

首先,我为每个输入使用id属性我真的不喜欢序列化的东西但是我可以按照你自己的方式来做这些文件。你的index.php:

 <form method="post" id="myformid">
  Name :<input type="text" id="name" name="name">
  <input type="submit"  value="Test">
  </form>
  <br>
  <div id="myDiv">
  </div>

你的javascript:

  //ajax function return a deferred object
    function _ajax(action,data){
      return $.ajax({
        url: 'request.php',
        type: 'POST',
        dataType: 'JSON',
        data: {action: action, data: data}
      })
    }
    //your form submit event
    $("#myformid").on('submit', function(event) {
      //prevent post
      event.preventDefault();
      //validate that name is not empty
      if ($("name").val() != "") {
        //parameters INS is insert data is the array of data yous end to the server
        var action = 'INS';
        var data = {
          name: $("#name").val()
        };
        console.log(data);
        //run the function and done handle the function
        _ajax(action,data)
        .done(function(response){
          console.log(response);
          //anppend name to the div
          $("#myDiv").append("<p>"+response.name+"</p>");
        });
      }
    });

你的request.php文件:

<?php
//includes and session  start here
//validate that request parameters are set
if (isset($_POST["action"]) && isset($_POST["data"])) {
  //getters
$action = $_POST["action"];
$data = $_POST["data"];
//switch to handle the action to perfom maybe you want to update with the form too ?
switch ($action) {
  case 'INS':
    // database insert  here..
    //return a json object
    echo json_encode(array("name"=>$data["name"]));
    break;
}
}
 ?>

结果:

希望它有帮助=)

用户回答回答于

您可以直接在ajax请求中设置序列化以发送params

function postData() {
    $('#myformid').on('submit', function(event) {
        event.preventDefault();

        $.ajax({
            type: "POST",
            url: "/my/path",
            data: $("#myformid").serialize(),
            success: function(){},
            dataType: "json",
            contentType : "application/json"
        });
    });
}

你可以POST使用$ _POST进入你的PHP

print_r($_POST);

扫码关注云+社区

领取腾讯云代金券