我是JSON的新手,并尝试了一些将PHP对象传递到另一个站点的测试
当我使用contentType:'application/json'时,它是如何产生的?字符串无法传递,
但当我取消显示默认的内容类型:"application/x-wwww-form-urlencoded"时,它会通过
字符串并对其进行解码而没有问题?
还是只在传递对象而不传递字符串时才使用application/json类型
也许我只是错过了一些基本的东西。。
PHP OBJ
$objectX = (object) ['name' => 'Here we go!','luckyNum' => 6,'rndText' => 'jkfid'];
JS
$('#btn1').on('click' , function(){
var json1 = JSON.stringify(<?php echo json_encode($objectX) ?>);
$.ajax({
url : 'try.php',
type : 'POST',
contentType : 'application/json; charset=UTF-8',
data : {
json1 : json1
}
})
.done (function(response) { console.log(response); })
.fail (function(jqXHR, textStatus, errorThrown ) { alert('[Error ' + jqXHR.status + "] " + textStatus + " : " + errorThrown); });
});
try.php
<?php
header('Content-Type: application/json; charset=UTF8');
$json1 = json_decode($_POST["json1"]);
echo "Player is: " . $json1->name;
echo "'nHis lucky Number is: " . $json1->luckyNum;
?>
使用application/x-www-form-urlencoded
时,格式如下所示:
var1=a&var2=b&var3=c
这将自动转换为可从$_POST
访问的数组。
然而,application/json
是另一种PHP不会自动解析的文本格式。可以通过读取虚拟文件php://input
来访问文本。
然而,另一点是,您的请求也是无效的。当数据不具有关联性时,您将发送一个键/值对作为正文。
在您的ajax请求中,将其更改为:
data : json1
在您的PHP脚本中使用:
$json1 = json_decode(file_get_contents('php://input'));
您的POST请求不是"JSON字符串",而是封装在application/x-www-form-urlencoded
消息中的JSON字符串。
任一:
发送实际的纯JSON消息
将JSON字符串传递给data
,而不是传递对象。传递一个对象将使jQuery将内容编码为表单数据。
data : json1
并更改PHP,使其停止尝试读取application/x-www-form-urlencoded
数据:
$inputJSON = file_get_contents('php://input');
$input= json_decode( $inputJSON, TRUE );
停止声称您正在发送JSON
删除:
contentType : 'application/json; charset=UTF-8',
不要让它变得复杂,将其作为普通POST发送:输出
<button id="btn1" type="button">Test</button>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">
<?php
// normal php object
$objectX = (object) ['name' => 'Here we go!','luckyNum' => 6,'rndText' => 'jkfid'];
?>
var json1 = <?php echo json_encode($objectX); // encode, no need for JSON.stringify ?>;
$('#btn1').on('click' , function(){
$.ajax({
url : 'try.php',
type : 'POST', // send as normal post
data : { json1 : json1 }, // just put a normal object
success: function(response) {
alert(response);
console.log(response);
}
});
});
</script>
然后在PHP上:
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$json1 = $_POST['json1'];
echo "Player is: " . $json1['name'];
echo "'nHis lucky Number is: " . $json1['luckyNum'];
exit;
}
?>
JSON以{开头,以}结尾。尝试发布格式良好的JSON字符串,名称之间用逗号