Javascript 如何在此处正确格式化或访问JSON?

Javascript 如何在此处正确格式化或访问JSON?,javascript,php,jquery,json,ajax,Javascript,Php,Jquery,Json,Ajax,我觉得自己找不到答案很愚蠢 我想通过jquery、AJAX和JSON将数据发送到php文件,将客户添加到数据库中 它可以工作,但是当我试图访问对象中的变量时,我得到了一个空响应。我不明白为什么 以下是我的PHP代码: $connection稍后会将DB连接传递给我,但由于调试原因,我尚未访问它 function addCustomer($connection){ $data = json_decode($_POST['data'], true); $surname = $dat

我觉得自己找不到答案很愚蠢

我想通过jquery、AJAX和JSON将数据发送到php文件,将客户添加到数据库中

它可以工作,但是当我试图访问对象中的变量时,我得到了一个空响应。我不明白为什么

以下是我的PHP代码:

$connection
稍后会将DB连接传递给我,但由于调试原因,我尚未访问它

function addCustomer($connection){
    $data =  json_decode($_POST['data'], true);
    $surname = $data['surname'];
    $name = $data['name'];
    $street = $data['street'];
    $streetNumber = $data['streetNumber'];
    echo $_POST['data'];
    echo $data;
    echo $name;
}  
前两个回音返回我所期望的,但第三个回音只输出
{


下面是JS代码:

function addCustomer(){
    var $surname = $('#addCuSurname').val();
    var $name = $('#addCuName').val();
    var $street = $('#addCuStreet').val();
    var $streetNumber = $('#addCuStreetNumber').val();

    if($surname != '' && $name != '' && $street != '' && $streetNumber != ''){

        var customer = '{"surname": "'+ $surname +'", "name": "'+ $name+'", "street": "'+ 
                        $street+'", "streetNumber": '+ $streetNumber +'}';

        $.ajax({
            url: 'scripts/backend/customers.php',
            type: 'post',
            data: {'action': 'addCu', 'data': JSON.stringify(customer)},
            dataType: "text",
            success: function(response, status) {

            },
            error: function(xhr, desc, err) {
                console.log(xhr);
                console.log("Details: " + desc + "\nError:" + err);
            }, 
        });
    }
}
我想这可能是我的JSON语法中的一个错误,但我没有找到任何对我有帮助的东西


提前感谢。

您正在尝试对已经是字符串的内容进行字符串化。请尝试这样定义客户:

var customer = {
  surname: $surname,
  name: $name,
  street: $street,
  streetNumber: $streetNumber
}

问题是您正在将
JSON.stringify()
应用于分配给客户的字符串(是的,它是一个表示JSON的字符串):

当您
stringify
it时,您得到的是一个表示JSON的字符串

> JSON.stringify({a: 1, b: 2});
"{"a":1,"b":2}"
> JSON.stringify("{a: 1, b: 2}");
""{a: 1, b: 2}""  // A string representing a string representing a JSON.
如您所见,在第一个示例中,我得到了表示JSON的字符串。第二个示例(对表示JSON的字符串进行字符串化)返回了表示JSON字符串的sting。我希望不要太混淆这些想法。让我们来看看解决方案

您有两种选择。首先,您可以构建JSON而不是JSON字符串:

var customer = {
    surname: $surname,
    name: $name,
    street: $street,
    streetNumber: $streetNumber
};
然后把它串起来

另一个选项是让JSON字符串保持与构建它一样的状态,但不对其应用
JSON.stringify()

...
data: {'action': 'addCu', 'data': customer},
...

我会选择第一种解决方案,因为这样可以确保获得格式正确的JSON字符串,而且比手工构建更简洁。

为什么需要将其作为JSON传递?您可以在
data
参数中使用嵌套对象,并在PHP中以嵌套数组的形式访问它们,例如
$\u POST['data']['name']
@Barmar我不需要,只是想尝试一下,这是我自己的一个入门项目,谢谢你的建议谢谢你,正如我上面提到的,通过这个精确的解决方案解决了这个问题:D
...
data: {'action': 'addCu', 'data': customer},
...