php将字符串化对象获取为null

php将字符串化对象获取为null,php,javascript,jquery,Php,Javascript,Jquery,我正在尝试使用jQueryAjax将一些信息传递到php页面。我真的不明白为什么php页面总是回想起我发送的strinified JSON是空的 //php if ($type == "new" || $type == "update"){ $new_address = json_decode($_REQUEST['address'], true); echo json_encode($new_address); //Null } //js var string_encoded

我正在尝试使用jQueryAjax将一些信息传递到php页面。我真的不明白为什么php页面总是回想起我发送的strinified JSON是空的

//php
if ($type == "new" || $type == "update"){
    $new_address = json_decode($_REQUEST['address'], true);
    echo json_encode($new_address); //Null
}

//js
var string_encoded_address = JSON.stringify(address_obj.address);
string_encoded_address = encodeURIComponent(string_encoded_address);
console.log(string_encoded_address);
$.ajax({
    type: "post",
    url: "order_queries_templates/queries/address.php",
    data: "type=new&user_id=" + user_id + "&address=" + string_encoded_address,
    dataType: "json",
    success: function (returnedData) {
        console.log(returnedData);
    }
});
这为我的
数据
属性提供了一个字符串:

type=new&user_id=8244&address=%7B%22companyName%22%3A%22test%20company%22%2C%22address1%22%3A%222420%20sample%20Road%22%2C%22city%22%3A%22SIOUX%20CITY%22%2C%22state%22%3A%22IA%22%2C%22zip%22%3A%2251106%22%2C%22cityStateZip%22%3A%22SIOUX%20CITY%2C%20IA%2051106%22%7D 

有什么问题吗?谢谢

代码不起作用的原因是您启用了
magic\u quotes\u gpc
。它将转义添加到双引号中,如使用以下
cli
脚本所示:

$s = 'address=%7B%22companyName%22%3A%22test%20company%22%7D';
// parse query string into array
parse_str($s, $a);
// print address portion
echo $a['address'], "\n";

php -dmagic_quotes_gpc=On test.php
输出:

{\"companyName\":\"test company\"}
额外的转义将中断
json\u decode()
,因此它将返回
null

关闭
magic\u quotes\u gpc
将通过使用
.htaccess
或编辑
php.ini
解决此特定问题

但是,让jQuery为您处理序列化要容易得多:

$.ajax({
    ...,
    data: {
      type:'new', 
      user_id: user_id, 
      adress: address_obj.address
    },
    ...
});

在这种情况下,您不必再在服务器上使用
json\u decode()
,只需直接引用
$\u POST['address']

代码不起作用的原因是您启用了
magic\u quotes\u gpc
。它将转义添加到双引号中,如使用以下
cli
脚本所示:

$s = 'address=%7B%22companyName%22%3A%22test%20company%22%7D';
// parse query string into array
parse_str($s, $a);
// print address portion
echo $a['address'], "\n";

php -dmagic_quotes_gpc=On test.php
输出:

{\"companyName\":\"test company\"}
额外的转义将中断
json\u decode()
,因此它将返回
null

关闭
magic\u quotes\u gpc
将通过使用
.htaccess
或编辑
php.ini
解决此特定问题

但是,让jQuery为您处理序列化要容易得多:

$.ajax({
    ...,
    data: {
      type:'new', 
      user_id: user_id, 
      adress: address_obj.address
    },
    ...
});

在这种情况下,您不必再在服务器上使用
json\u decode()
,只需直接引用
$\u POST['address']

我认为您必须
urldecode($\u请求['address'])
在您可以使用它之前。尝试对您设置的整个查询进行字符串化,并作为
数据传递
@FabianBlechschmidt好的尝试了此操作…实际上没有任何效果。感谢您考虑什么是
var\u dump($\u REQUEST['address'])
?我认为您必须
urldecode($\u REQUEST['address'])
才能使用它。尝试将您设置的整个查询字符串化,并作为
数据传递。
@fabianblechmidt好的尝试了这个…没有任何效果。感谢您,什么是
var\u转储($\u请求['address'])
?@thomas没问题;请注意我回答的第二部分,它讨论了一种更简单的处理数据发送的方法。它只会将
地址_obj.address
识别为json对象,并对我进行字符串化,php会将其理解为一个关联数组,就像它将
json_解码($var,**TRUE**)
?@thomas Wat?我不知道你在说什么,对不起:)不,对不起。不太清楚。当我将第二个参数
true
传递给
json\u decode()
时,它将json字符串转换为关联数组。我只是想知道,当我从服务器上删除了
JSON\u decode()
时,如何从JSON中获得关联数组。就像你在回答的最后两行说的。编辑:删除了一个问题,我现在看到你已经在最后一行回答了。谢谢你的帮助@thomas使用我答案的最后一点类似于您将
true
作为
json_decode()
:)@thomas没问题;请注意我回答的第二部分,它讨论了一种更简单的处理数据发送的方法。它只会将
地址_obj.address
识别为json对象,并对我进行字符串化,php会将其理解为一个关联数组,就像它将
json_解码($var,**TRUE**)
?@thomas Wat?我不知道你在说什么,对不起:)不,对不起。不太清楚。当我将第二个参数
true
传递给
json\u decode()
时,它将json字符串转换为关联数组。我只是想知道,当我从服务器上删除了
JSON\u decode()
时,如何从JSON中获得关联数组。就像你在回答的最后两行说的。编辑:删除了一个问题,我现在看到你已经在最后一行回答了。谢谢你的帮助@thomas使用我答案的最后一点类似于您将
true
作为
json\u decode()
:)的第二个参数所获得的结果