我知道关于这个问题有很多不同的问题,但似乎没有一个与我有关。我有一个ajax请求如下:
var responsePacket;
$.ajax({
dataType: 'json',
type:'POST',
data:{
"updatePacket":{
"job":"name-update",
"firstName":firstName,
"lastName":lastName
}
},
processData: false,
url:'modify.php',
success: function(json){
console.log(json);
responsePacket = json;
if(responsePacket.updateStatus==true){
genAlertAlignAndShow('Name Successfully Updated', false, 4000);
}
else{
genErrorAlignAndShow('Name Update Failed!', false, 4000);
}
}
})
另一端的PHP代码如下:
$updatePacket = json_decode($_POST['updatePacket'], true);
//and I access variables from the JSON Object like this:
$job = $updatePacket['job'];
响应AJAX, PHP文件将输出一个简单的JSON对象,是的,我的头被设置为application/json
。这就是我输出JSON响应的方式,我已经测试过了,当我设置它返回静态响应时,它似乎回到了AJAX请求:
$responsePacket = array("updateStatus"=>true);
echo json_encode($responsePacket);
但问题来了正如您所看到的,我将数据输出到控制台,但它说的都是null
,我推断这表明JSON没有正确地到达PHP。那么,是否有一种合适的方法来创建JSON对象并准备一个AJAX请求,以便将数据完整地获取到PHP脚本?
这个问题我已经纠结了3个小时了,欢迎提出任何建议
我相信$_POST['updatePacket']
实际上不是json字符串。试着这样访问它:
$updatePacket = $_POST['updatePacket'];
$job = $updatePacket['job'];
不需要json_decode()
它。json_decode()
手册(返回值):
如果json不能被解码,则返回NULL…
试一试。正如评论中提到的,var_dump($_POST);
应该是你尝试的第一件事,以确保你得到你认为你是什么。
我明白了。这是我的AJAX请求:
$.post('modify.php', { job: "name-update", lastName: lastName }, function(data){
console.log(data);
})
问题:
当为AJAX Post请求声明数据时,在变量名上加上引号将使接收脚本无法访问这些变量。
您可以轻松地使用jquery或javascript以干净的方式获取表单数据的耗时问题。
您所需要做的就是.serialize()数据。这里有一个例子。
$( "form" ).on( "submit", function( event ) {
event.preventDefault();
console.log( $( this ).serialize() );
});
完成后,您可以将字符串转换为如下所示:
"param1=someVal¶m2=someOtherVal"
与
$params = array();
parse_str($_GET, $params);
使用这种用法时,您还需要过滤数据,并且应该在上述操作之前执行此操作。
http://php.net/manual/en/function.filter-input.php
这样做比在ajax中单独列出每一个更节省时间。您还可以创建一个函数来完成此工作,这样您就不必不断编写ajax样板代码。
你做错了。您不向服务器发送JSON对象,而是发送键/值对。这就是jQuery所期望的。不如这样做:
data: {
"job": "name-update",
"firstName": firstName,
"lastName": lastName
},
并像这样访问值:
$job = $_POST['job'];