在两个网站之间传递JSON数组

时间:2013-01-09 17:09:35

标签: php json curl

我想在两个网站之间传递一个数组,但我很难做到这一点,在我的localhost中我尝试这个代码:

 $array = array("12" => "val", "34" => "val2");
 $url = 'http://example1.com/save.php';
 $post = 'data='.json_encode($array);
 $ch = curl_init($url);
 curl_setopt($ch, CURLOPT_POST, true);
 curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
 curl_setopt($ch, CURLOPT_HEADER, false);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
 curl_exec($ch);
 curl_close($ch);

然后在example1.com/save.php中我这样做只是为了测试:

 $result = json_decode($_POST['data'],true);

 foreach ($result as $key => $value) {
    echo $key.'='.$value.'<br />';
 }

但这给了我这个警告:

  Warning: Invalid argument supplied for foreach() in /home/a2549384/public_html/save.php on line 5

有什么解决方案吗?

2 个答案:

答案 0 :(得分:0)

您应该使用is_array函数检查传递给foreach的内容是否为数组。错误意味着你正在对不是数组的东西做一个foreach。

检查你的foreach并查看as之前的东西是否实际上是一个数组。不仅在理论上,而且实际上使用var_dump来转储它。

此外,如果您不确定它是否为数组,您可以随时使用以下PHP示例代码进行检查:

if (is_array($variable)) {

  foreach ($variable as $item) {
   //do something
  }
}

答案 1 :(得分:0)

您可能需要更改

$post = 'data='.json_encode($array);

$post = 'data='.urlencode(json_encode($array));

在任何情况下,只需另一方var_dump($_POST);,看看是否存在编码错误。

使用json_last_error(),您可以检查解码时是否有错误。