我因为ajax响应创建了我的第一个通用代码而陷入困境。我只是在这里得不到输出,既不是在php中也不是在ajax响应中。这必须包含在帖子数据中。
这是我的ajax请求:
var info = {};
//get id info
info["ses-id"] = $("#theme").attr("scene");
//get template info
info["ses-template"] = $("#theme").attr("template");
$.ajax({
dataType: "json",
contentType: "application/json; charset=UTF-8",
data: JSON.stringify(info),
type: "POST",
url: "query.php"
}).done(function(data, textStatus, jqXHR) {
alert (data);
//window.location = "?szenen";
console.log("Data sent.");
}).fail(function(jqXHR, textStatus, errorThrown) {
console.log("There was an error." + errorThrown);
});
到目前为止,这是我的query.php:
<?php
$return = $_POST;
$return["json"] = json_encode($return);
print(json_encode($return));
输出是一个对象,其中只有json条目用[]填充。
stringified变量看起来不错,它是这样的字符串:
{"ses-id":"1","ses-template":"2"}
感谢您的任何建议!
答案 0 :(得分:1)
您的问题是您正在发送一个json编码的字符串作为POST正文,然后使用$ _POST来访问它。 $ _POST是键/值POST数据的数组。由于您的数据没有密钥,因此您无法从$ _POST数组访问它。它只是一个值(字符串值)。
如果您将PHP脚本更改为:
<?php
echo file_get_contents("php://input");
?>
它将输出您传入的JSON。请注意,不需要执行json_encode()
,因为该值是字符串,而不是数组。你通过它的json从未解码过。
或者,如果你的javascript是:
$.ajax({
data: { "data": JSON.stringify(info) },
type: "POST",
url: "query.php"
})
那么你的帖子就是:
data={"ses-id":"1","ses-template":"2"}
然后你可以做
<?php
echo $_POST["data"];
?>
再次注意到您发送的数据从未被解码过,因此它仍然只是一个字符串。 PHP没有json_decode给你。
答案 1 :(得分:0)
当你删除contentType和JSON.stringify:
时,它会起作用 var info = {};
//get id info
info["ses-id"] = $("#theme").attr("scene");
//get template info
info["ses-template"] = $("#theme").attr("template");
$.ajax({
dataType: "json",
data: info,
type: "POST",
url: "query.php"
}).done(function(data, textStatus, jqXHR) {
console.log(data);
//window.location = "?szenen";
console.log("Data sent.");
}).fail(function(jqXHR, textStatus, errorThrown) {
console.log("There was an error." + errorThrown);
});
答案 2 :(得分:0)
必须停用dataType和contentType,然后我才得到回复。
$.ajax({
//dataType: "json",
//contentType: "application/json; charset=UTF-8",
data: JSON.stringify(info),
type: "POST",
url: "query.php"
改变信息对象会导致php var的变化,但这不是我的问题。
非常感谢大家特别CJ_Wurtz以正确的方式推动我。