通过JQuery ajax.post将JSON数据提交到PHP

我使用POST通过AJAX将数据提交到php文件。仅提交字符串就可以很好地工作,但是现在我想使用JSON提交JS对象并在PHP端对其进行解码。

在控制台中,我可以看到我的数据已正确提交,但在PHP端,json_decode返回NULL。

我尝试了以下方法:

this.getAbsence = function()

{

alert(JSON.stringify(this));

jQuery.ajax({

type: "POST",

contentType: "application/json; charset=utf-8",

url: "ajax/selectSingle.php?m=getAbsence",

data: JSON.stringify(this),

success : function(data){

alert(data);

}

});

}

PHP:

echo $_POST['data'];

echo json_decode($_POST['data']);

echo var_dump(json_decode($_POST['data']));

和:

this.getAbsence = function()

{

alert(JSON.stringify(this));

jQuery.ajax({

type: "POST",

contentType: "application/json; charset=utf-8",

url: "ajax/selectSingle.php?m=getAbsence",

data: {'Absence' : JSON.stringify(this)},

success : function(data){

alert(data);

}

});

}

PHP:

echo $_POST['Absence'];

echo json_decode($_POST['Absence']);

echo var_dump(json_decode($_POST['Absence']));

警报只是检查一切还好…

是的,通常的字符串被正确地回显了:-)

回答:

您在第一个代码中出错的地方是您必须使用以下代码:

var_dump(json_decode(file_get_contents("php://input"))); //and not $_POST['data']

引用PHP手册

php:// input是一个只读流,允许您从请求正文中读取原始数据。

由于您要在主体中提交JSON,因此必须从此流中读取它。通常的方法$_POST['field_name']不会起作用,因为发布主体不是采用URL编码的格式。

在第二部分中,您必须使用了以下命令:

contentType: "application/json; charset=utf-8",

url: "ajax/selectSingle.php?m=getAbsence",

data: JSON.stringify({'Absence' : JSON.stringify(this)}),

当request具有内容类型时application/json,PHP不会解析请求,并在中提供JSON对象$_POST,您必须自己从原始HTTP正文中对其进行解析。使用检索JSON字符串file_get_contents("php://input");

如果您必须使用$_POST它,可以做到:

data: {"data":JSON.stringify({'Absence' : JSON.stringify(this)})},

然后在PHP中执行以下操作:

$json = json_decode($_POST['data']);

以上是 通过JQuery ajax.post将JSON数据提交到PHP 的全部内容, 来源链接: utcz.com/qa/415785.html

回到顶部