抱歉,如果这已经被问了很多次,但我不能让它工作。我正在尝试建立一个restful风格的网站,我有一个简单的表单:
<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://input‘。
我如何修复它,使JSON被接受,甚至通过Javascript发送?
发布于 2019-05-21 05:24:07
您好,您可以这样尝试:
首先,我为每个输入使用一个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;
}
}
?>
结果:
希望这会有帮助=)
发布于 2019-05-20 22:31:08
更改ajax代码
$('#btnSubmit').on('click', function(event) {
event.preventDefault();
$.ajax({
type: "POST",
url: "/new.php",
data: $("#myformid").serialize(),
dataType: "json",
success: function(response) {
console.log(response);
}
});
});
此外,您还需要在表单中进行一些更改
<form action="new.php" method="post" id="myformid">
Name <input type="text" name="name">
<input id="btnSubmit" type="button" value="Test">
你可以在像$_POST['name']
这样的php文件中获取帖子数据。
https://stackoverflow.com/questions/56222590
复制相似问题