无法使用$ .post()解压缩php数组

时间:2013-08-13 16:32:31

标签: php jquery ajax

我有一个存储在php中的数组:$cv1 = array('a','b');

正如您在下面的代码中看到的那样,我试图从数组中获取相应的数据,然后将其委托给两个单独的函数。

但是从php回调函数返回的数据是:'Array'而不是'a','b'; 结果[0]得到'A'结果[1]得到'r'等等。

感谢您的帮助!

js:

$('a').on('click',function(){
  var cv = $(this).data('cv');
  var url= '_php/myphp.php';
  $.post(url,{contentVar:cv},function(data) {
    result=data;
    return result;
  }).done(function() {
    alert(result[0]);
    $('#myDiv').html(result[1]);
  });
});

PHP:

$cv1 = array("a","b");

$contentVar = $_POST['contentVar'];

if($contentVar == "cv1")
{
    echo json_encode($cv1);
}

3 个答案:

答案 0 :(得分:3)

在PHP中常见的是,当它意外地被转换为字符串时,你得到的是"Array"而不是实际的数组。那不是你在这里做的事情;我们可以测试一下:

> $cv1 = array("a","b");
array(2) {
  [0] =>
  string(1) "a"
  [1] =>
  string(1) "b"
}
> json_encode($cv1);
string(9) "["a","b"]"

$cv1被正确编码。

你必须像对待其他地方的字符串一样对待它:

> (string)array("a","b")
! Array to string conversion
string(5) "Array"

另外,为什么$.post有两个成功的回调?第三个参数是成功回调,其作用与.done相同。使用其中一个(我推荐done),但不能同时使用两者。

您也可以考虑将json作为最后一个参数(dataType),以便jQuery知道会发生什么,并将正确解码结果。

答案 1 :(得分:0)

尝试做这样的事情:

$.post(url,{contentVar:cv}
   function(response)
   {
      alert(response[0]);
   },'json'
);

答案 2 :(得分:0)

您需要将json字符串格式转换为javascript对象/数组。

  

var result = $ .parseJSON(data);

有关详细信息,请参阅此问题jQuery ajax request with json response, how to?

但是有一些奇怪的事情,如果返回'A​​rray',php没有将数组转换为json,如果($contentVar == "cv1")返回false会发生什么?如果你将一个数组返回到javascript,你需要转换为一个字符串(并且json格式是完美的)。