我是JSON的新手并尝试了一些将PHP对象传递到另一个网站的测试
当我使用 contentType时,它是如何实现的:' application / json' 字符串无法通过,
但是当我不知道默认的 contentType:' application / x-www-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;
?>
答案 0 :(得分:2)
使用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'));
答案 1 :(得分:1)
您的POST请求不是“JSON字符串”,它是封装在application/x-www-form-urlencoded
消息中的JSON字符串。
或者:
将JSON字符串传递给data
,而不是传递对象。传递一个对象将使jQuery将内容编码为表单数据。
data : json1
并更改PHP以便它不再尝试读取application/x-www-form-urlencoded
数据:
$inputJSON = file_get_contents('php://input');
$input= json_decode( $inputJSON, TRUE );
卸下:
contentType : 'application/json; charset=UTF-8',
答案 2 :(得分:1)
不要让它变得复杂,将其作为正常的POST发送:Output
<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;
}
?>
答案 3 :(得分:-1)
JSON以{开头,以}结尾。尝试发布格式正确的JSON字符串,名称之间使用逗号