Javascript 如何在此处正确格式化或访问JSON?
我觉得自己找不到答案很愚蠢 我想通过jquery、AJAX和JSON将数据发送到php文件,将客户添加到数据库中 它可以工作,但是当我试图访问对象中的变量时,我得到了一个空响应。我不明白为什么 以下是我的PHP代码: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
$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},
...