Sam*_*ami 6 php ajax jquery json
我使用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);
}
});
}
Run Code Online (Sandbox Code Playgroud)
PHP:
echo $_POST['data'];
echo json_decode($_POST['data']);
echo var_dump(json_decode($_POST['data']));
Run Code Online (Sandbox Code Playgroud)
和:
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);
}
});
}
Run Code Online (Sandbox Code Playgroud)
PHP:
echo $_POST['Absence'];
echo json_decode($_POST['Absence']);
echo var_dump(json_decode($_POST['Absence']));
Run Code Online (Sandbox Code Playgroud)
警报只是检查一切都没问题......
而通常的字符串是正确回应的:-)
Ult*_*nct 23
在第一个代码中你的代码出错的地方是你必须使用它:
var_dump(json_decode(file_get_contents("php://input"))); //and not $_POST['data']
Run Code Online (Sandbox Code Playgroud)
引自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)}),
Run Code Online (Sandbox Code Playgroud)
更新:
当请求具有内容类型时application/json,PHP不会解析请求并为您提供JSON对象$_POST,您必须自己从原始HTTP主体解析它.使用获取JSON字符串file_get_contents("php://input");.
如果你必须使用$_POST它,你会做到:
data: {"data":JSON.stringify({'Absence' : JSON.stringify(this)})},
Run Code Online (Sandbox Code Playgroud)
然后在PHP中执行:
$json = json_decode($_POST['data']);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29878 次 |
| 最近记录: |