2012-11-21 71 views
0

我正在学习JSON。我已经四处阅读,找到解决方案,我可能做错了,但我严重无法找到它。我正在尝试将JSON strnig传递给PHP并查看它返回的内容......我当前的代码总是返回null,而不管我做什么。 我觉得我正在通过本书做所有工作。但显然我必须缺少一些东西将JSON字符串传递给PHP时返回值为NULL

有谁能告诉我为什么$arrayData总是返回NULL

我可以看到什么是目前发布的mydata=%7B%22name%22%3A%22yes%22%2C%22regno%22%3A%22hola%22%7D 如果我不使用JSON.stringify()然后我看到的数据发送的mydata=[object Object]

PHP

​​

HTML

<script> 
function lol() { 
      var name = "yes"; 
      var regno = "hola"; 
      var arrayData = {"name":name,"regno":regno}; 
      console.log(arrayData); 

      $.ajax({ 
         url: "algo2.php" 
         ,type: "POST" 
         ,headers: {'Content-Type': 'application/json',} 
         ,data: {'mydata=' : JSON.stringify(arrayData)} 
         ,success : function(response) {        
         alert(response);    
         } 
         ,error: function (xhr, ajaxOptions, thrownError) { 
         alert(thrownError); 
         } 
       }); 
} 

</script> 
</head> 
<button onclick="lol()">Try it</button> 

OPTION 2

function lol() { 
      var name = "yes"; 
      var regno = "hola"; 
      var arrayData = {"name":name,"regno":regno}; 
      console.log(arrayData); 
      console.log(JSON.stringify(arrayData)); 
      $.ajax({ 
         url: "algo2.php" 
         ,type: "POST" 
         ,data: 'mydata=' + arrayData 
         ,success : function(response) {        
         alert(response);    
         } 
         ,error: function (xhr, ajaxOptions, thrownError) { 
         alert(thrownError); 
         } 
       }); 
} 

回答

0

a。 b。删除标题东西
b。更改关键mydata没有等号

var name = "yes"; 
var regno = "hola"; 
var arrayData = {"name":name,"regno":regno}; 

$.ajax({ 
     url: "index.php" 
     ,type: "POST" 
     ,data: {'mydata' : JSON.stringify(arrayData)} 
     ,success : function(response) {        
     //alert(response);    
     } 
     ,error: function (xhr, ajaxOptions, thrownError) { 
     //alert(thrownError); 
     } 
}); 
+0

我已经尝试使用'mydata'而不是'mydata =',我得到相同的结果。 –

+0

'print_r($ _ POST)'并检查萤火虫,实际上有东西发送到服务器 – Alex

+0

如果我print_r($ _POST)我得到阵列 ( ) –

0

您需要首先urldecode()的数据,如果您有它字符串化:

$mydata="%7B%22name%22%3A%22yes%22%2C%22regno%22%3A%22hola%22%7D"; 
$json= urldecode($mydata); 
$array = json_decode($json, true); //use the argument true if you want the object to be returned as an Associative array 
print_r($array); 

如果你不使用json_decode第二个参数()它将被返回作为对象:

$mydata="%7B%22name%22%3A%22yes%22%2C%22regno%22%3A%22hola%22%7D"; 
$json= urldecode($mydata); 
$object = json_decode($json); 
echo $object->name; 
+0

即使我使用urldecode($ _ POST);它也不起作用。但我不应该做urldecode ...我还没有看到使用该单个JSON示例 –

+0

也许是头上的东西deceze回答,我只是尝试了我粘贴的代码,它的工作原理,我的意思是,它返回数组/对象正确 – aleation

0
mydata=%7B%22name%22%3A%22yes%22%2C%22regno%22%3A%22hola%22%7D 

这是application/x-www-form-urlencoded数据,而不是application/json数据。然而你在你的头文件中指定它是JSON数据。 PHP将不会解码该数据,并且不会填充$_POST阵列。

要么发送实际的JSON数据与JSON头,并自己解码(从php://input),或省略头,发送urlencoded数据(像你一样),并让PHP填充$_POST阵列。

+0

谢谢你的回应。我已经尝试过“header:{'Content-Type':'application/json',},data:'mydata ='+ arrayData”但仍然不起作用。你能举一个例子说明如何把它作为JSON发送吗?谢谢 –

+0

你发送的内容和你声称发送的内容不匹配! '“mydata = ...”'是** urlencoded **格式,而不是JSON。当你不是时,不要声称发送JSON。不要紧,'mydata'的值是JSON,它是以urlencoded格式包装的。保留urlencoded数据,只是删除错误地指定您发送JSON数据的'headers'声明。 – deceze

0

如果你发送JSON到PHP你需要阅读原始输入,就像这样:

$input = file_get_contents("php://input"); 
if (!empty($input)) { 
    $arrayData = json_decode($input, true); 
    var_dump($arrayData); 
} 

也jQuery中我用这个JSON请求:

$.ajaxSetup({ dataType:"json", mimeType:"application/json", contentType:"application/json"}) 
+0

我刚刚用我的PHP文件替换了它,它仍然返回null,并且我把JS的“header” –

相关问题