我使用ajax post从jquery发送json对象,我想使用php解析它并将相同的对象发回。这个帖子很成功,所以我的目标是去那里,但我没有得到适当的回应。我从html表单发送名字和姓氏,但我得到的响应json对象是我的控制台: -
response : [object Object]
当我试图在浏览器中看到php端时,我得到的错误如下: -
<br />
<b>Notice</b>: Trying to get property of non-object in <b>C:\xampp\htdocs\jsonTest\process.php</b> on line <b>8</b><br />
<br />
<b>Notice</b>: Trying to get property of non-object in <b>C:\xampp\htdocs\jsonTest\process.php</b> on line <b>9</b><br />
{"firstname":null,"lastname":null}
我在stackoverflow上看过关于上述错误的帖子,但场景与我的不同。我确实从jquery端发送json对象所以我不知道为什么我甚至得到这个错误。在&#34;网络&#34; console我可以看到它成功发送了json对象。
这是我的jquery部分: -
$("#userDataForm").submit(function(e){
e.preventDefault();
var formData={
fname:$("#fname").val(),
lname:$("#lname").val()
};
$.ajax({
type:'post',
url:'process.php',
dataType:'json',
data:JSON.stringify(formData),
contentType: "application/json",
success:function(response){
var response= $.trim(response);
console.log("response : "+response);
}
});
});
这是我正在使用的html表单:
<form id="userDataForm">
<input type="text" placeholder="Firstname" name="fname" id="fname" />
<input type="text" placeholder="Lastname" name="lname" id="lname" />
<input type="submit" value="submit" name="submit">
</form>
这是php部分: -
<?php
header('Content-type:application/json');
$request = file_get_contents('php://input');
$input=json_decode($request);
$jsonResponse=array(
'firstname' => $input->fname,
'lastname' => $input->lname
);
echo json_encode($jsonResponse);
?>
我已经通过几个stackoverflow帖子为我的错误,但到目前为止,我还没有能够遇到任何帖子,其中json对象从ajax发送,也从php收到。此外,我想知道isset($ _ POST)将如何适应代码的这种情况,因为我发送json对象而不是常规表单数据。
答案 0 :(得分:1)
尝试将ajax数据部分更改为:
data: {
data: JSON.stringify(formData)
},
并在php中接收请求:
$request = $_POST['data'];
编辑:完整测试代码
HTML:
<form id="userDataForm">
<input type="text" placeholder="Firstname" name="fname" id="fname" />
<input type="text" placeholder="Lastname" name="lname" id="lname" />
<input type="submit" value="submit" name="submit">
</form>
JS:
$('#userDataForm').submit(function(e){
e.preventDefault();
var formData={
fname:$('#fname').val(),
lname:$('#lname').val()
};
jQuery.ajax({
type: 'POST',
url: 'process.php',
dataType: 'json',
data: {
data: JSON.stringify(formData)
},
success: function(res) {
alert(res);
}
});
});
PHP:
if (isset($_POST['data'])) {
$request = $_POST['data'];
$input = json_decode($request);
$jsonResponse = array(
'firstname' => $input->fname,
'lastname' => $input->lname
);
echo json_encode($jsonResponse);
}
答案 1 :(得分:1)
您可以这样做:(tested
)
<强> HTML 强>
<form id="userDataForm">
<input type="text" placeholder="Firstname" name="fname" id="fname" />
<input type="text" placeholder="Lastname" name="lname" id="lname" />
<input type="submit" value="submit" name="submit">
</form>
<强>的jQuery 强>
$(document).ready(function(){
$("#userDataForm").submit(function(e){
e.preventDefault();
var formData={
fname:$("#fname").val(),
lname:$("#lname").val()
};
$.ajax({
type:'post',
url:'process.php',
dataType:'json',
data:JSON.stringify(formData),
contentType: "application/json",
success:function(response){
// process json object
console.log(response.fname);
console.log(response.lname);
},
error: function(jqXHR, textStatus, errorThrown){
alert(errorThrown);
}
});
});
});
<强> process.php 强>
<?php
$json_array = json_decode(file_get_contents("php://input"), true);
$my_array = array();
foreach($json_array as $key => $value){
$my_array[$key] = $value;
}
echo json_encode($my_array);
?>
因为在您的情况下,您正在正文中提交JSON,所以您必须从此流中读取它。 $_POST
超全球的常用方法在这里不起作用。
引用PHP手册:
php:// input是一个只读流,允许您从请求正文中读取原始数据。