JQuery.ajax和object与php的空响应
我一直在为ajax响应创建我的第一个通用代码。我在这里没有得到任何输出,无论是在php中还是在ajax响应中。这必须在post数据中包含某些内容 这是我的ajax请求:JQuery.ajax和object与php的空响应,php,jquery,ajax,json,Php,Jquery,Ajax,Json,我一直在为ajax响应创建我的第一个通用代码。我在这里没有得到任何输出,无论是在php中还是在ajax响应中。这必须在post数据中包含某些内容 这是我的ajax请求: var info = {}; //get id info info["ses-id"] = $("#theme").attr("scene"); //get template info info["ses-template"] = $("#theme
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编码的字符串作为帖子正文,然后使用$\u POST访问它$_POST是键/值POST数据的数组。由于您的数据没有密钥,因此无法从$\u POST数组访问它。它只是一个值(一个字符串值) 如果将PHP脚本更改为:
<?php
echo file_get_contents("php://input");
?>
那么您的帖子主体将是:
data={"ses-id":"1","ses-template":"2"}
然后你就可以做了
<?php
echo $_POST["data"];
?>
再次指出,你发送的数据从未被解码,所以它仍然只是一个字符串。PHP不会为您解码json。当您删除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);
});
数据类型和内容类型都必须停用,然后我得到了响应
$.ajax({
//dataType: "json",
//contentType: "application/json; charset=UTF-8",
data: JSON.stringify(info),
type: "POST",
url: "query.php"
改变info对象会导致php变量的变化,但这不是我的问题
非常感谢所有人,尤其是那些把我推到正确方向的人。succes函数在哪里?它不需要是
json\u decode
?@Naruto succes()、error()和complete()在JQuery 1中被弃用。8@Naruto从jQuery文档:成功回调选项的另一种构造,.done()方法替换了不推荐使用的jqXHR.success()方法
好吧,看来我今天学到了一些新东西:)我将行更改为data:{“data”:JSON.stringify(info)},
,但是$\u POST[“data”]仍然是空的。我不明白。请检查echo文件是否包含内容(“php://input");代码>工作。还更新了我的答案,删除了定义的json数据/内容类型。我正在获取数据(哇哦),但它似乎是URL编码的。我将尝试将它放入post变量中。当您删除contentType
和JSON.stringify
时,就像我的回答中一样,然后$\u post是正常数组,具有预期的键值对。np,很抱歉,我没有注意到,我假设jquery是正确的,只是手动测试post调用,并且看到数据顺利通过。还刚刚检查了文档,不要删除数据类型:“json”
我对他说,这就是解码json响应的内容,结果是contentType和dataType必须被删除。
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);
});
$.ajax({
//dataType: "json",
//contentType: "application/json; charset=UTF-8",
data: JSON.stringify(info),
type: "POST",
url: "query.php"