如何使用PHP&传递数组Ajax到Javascript?

时间:2011-08-31 20:35:28

标签: php javascript jquery ajax json

道歉,如果这个解释不清楚,我也很难理解。 我如何使用PHP&amp; Ajax将数组发送到Javascript?我正在使用Ajax来获取一系列照片,然后我要将其附加到我页面上的空<div>

jQuery看起来如下:

$.ajax({
    url: "<?php echo site_url('demo/getPhotos/'); ?>",
    type: 'POST',
    data: form_data,
    success: function(data) {
        alert(data);
   }

PHP函数getPhotos看起来像这样:

<?php

$photos = array();

foreach ($data as $photo) {
    array_push($photos,$photo['source']);
    }

// echo json_encode($photos); How should I be returning $photos?

如果我只是echo $photos;数据被发送到成功回调,但它似乎没有可用的格式。

如果我在PHP中使用var_dump($photos),结果类似于:

array(4) {
  [0]=>
  string(14) "some_image.jpg"
  [1]=>
  string(14) "some_image.jpg"
  [2]=>
  string(14) "some_image.jpg"
  [3]=>
  string(14) "some_image.jpg"
}

我尝试了json_encode之类的各种组合,但实际上我猜测并且不确定它背后的理论。在这种情况下,将数据从PHP传递到Javascript的最佳方法是什么?

5 个答案:

答案 0 :(得分:23)

尝试:

$.ajax({
    url: "<?php echo site_url('demo/getPhotos/'); ?>",
    type: 'POST',
    data: form_data,
    dataType:"json",
    success: function(data) {
        alert(data[0]);
   }

在PHP方面,你会想要打印:

print json_encode($photos);

为了更好地封装代码,您可能会尝试的另一件事,以及作为进一步JSON gooodness的示例,将是:

print json_encode(array("photolist"=>$photos,"photo_owner"=>"Me!"));

然后在服务器上,您可以通过以下方式访问它们:

data.photolist[0]; //First photo
data.photo_owner;  //The owner of the photo set

答案 1 :(得分:10)

我在PHP中和请求结束时创建了一个数组$result

 echo json_encode($result); 

和JS $.post处理函数:

var obj = $.parseJSON(data);
var v = data.k; 

其中k是关联数组中的键值。

答案 2 :(得分:2)

json_encode绝对是最佳选择。 jQuery甚至内置了对解析JSON的支持。你可以使用例如。

$.ajax({
    url: "<?php echo site_url('demo/getPhotos/'); ?>",
    type: 'POST',
    data: form_data,
    dataType: 'json', // will automatically convert array to JavaScript
    success: function(array) {
        alert(array[0]); // alerts first string
    }
});

答案 3 :(得分:0)

返回json本身然后通过循环遍历json在js中构造数组,如下所示:

var array=[];
for(var key in json)
{    
    if(json.hasOwnProperty(key))
      array.push(json[key]);
}

或者你可以简单地使用json本身任何需要数组的原因?

类似于json [0]或json [1]等。

答案 4 :(得分:0)

当你需要这些东西时,

json_encode rulez。

我最近也学到了很酷的东西!这是你如何做到的:

function jsonResponse($array) {
     header('Content-type: application/json; charset=utf-8;');
     die(json_encode($array));
}

这是可选的,如果你想这样做,你不需要,但在我的MVC系统中,我倾向于这样写...所以首先我做一个ajax请求(原型),到脚本,后来我之前提到过调用这个函数jsonResponse ...

    new Ajax.Request('URL',
{
    method:'post',
    onSuccess: function(transport){
        res = transport.responseJSON;
        $('actionInformation').update(res.username);
    },
    onFailure: function(){
        alert('Something went wrong...')
    }
});

这是jscript代码,注意res.msg,这是我们可以用数组操作的地方。但是,一定要在PHP中以JSON格式发送响应,使用jsonResponse函数,它很容易使用,例如,你的php函数看起来像这样:

function ajax_get_user() {
     $userName = 'Adrian';
     $active = 1;
     jsonResponse(array('username' => $username, 'active' = $active));
}

稍后你可以轻松搞定,res.username,res.active。

我认为应该这样做!