AJAX, JSON, jQuery, and PHP


AJAX, JSON, jQuery, and PHP

我知道关于这个问题有很多不同的问题,但似乎没有一个与我有关。我有一个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&param2=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'];