如何将使用PHP和Ajax的数组传递给Javascript?

问题描述:

如果这个解释不清楚,我很难理解。 如何使用PHP & Ajax将数组发送到Javascript?我使用Ajax获取照片数组,然后我将追加到我的页面上的空白<div>如何将使用PHP和Ajax的数组传递给Javascript?

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;将数据发送到成功回调,但它不” t似乎是可用的格式。

如果我在PHP做一个var_dump($photos),结果看起来是这样的:的json_encode

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" 
} 

我已经试过各种组合等,但是真的,我猜测和不知道它背后的理论。在这种情况下,将数据从PHP传递到Javascript的最佳方式是什么?

尝试:

$.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流行度的示例,将是:

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

然后在服务器上,你会访问这些有:

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

完美,谢谢。您是否愿意详细说明优化以更好地封装代码? –

+1

当然,@Joe。如果你只是想返回一张照片列表,你有什么好。但是,如果以后你决定要返回有关每张照片的详细信息,然后关联数组,因为它导致了一个很好的方式来访问JS的数据是有用的。这样做的另一种方法可能是使每一张照片的关联数组,并返回关联数组的数组,丙氨酸:'阵列(阵列(“名称” =>“照片1”,“文件” =>“img1.jpg”), array(“name”=>“海滩周末”,“file”=>“imgs/beachphoto.jpg”))'。 – Richard

+0

@Joe:执行上述操作的好处与您试图通过代码实现的目的相关。如果你后来发现自己做了一些令人费解的事情来恢复数据,请记住我们有过这样的对话,也许这会帮助你:-)这是否澄清了事情? – Richard

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 
    } 
}); 

回报JSON本身,然后通过循环在JSON构建JS数组如下:

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

或者你可以简单地与json本身一起工作,需要数组的任何理由?

类似json的[0]或JSON [1]等

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,这是我们可以用数组操作的地方。但是,一定要送响应JSON格式在你的PHP,使用jsonResponse功能,可以很容易地使用,例如,你的PHP函数可以是这个样子:

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

以后你能得到它容易,RES .username,res.active。

我认为这应该做到这一点!

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

echo json_encode($result); 

和JS $.post处理函数:

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

其中k是在关联数组密钥值。

+0

JavaScript中没有关联数组,只有对象。 – Marcelo

+0

您可能还需要检查,如果你在AJAX调用找回值不为NULL –

+0

Marelo,我的意思是救了我的熏肉与$ .parseJSON调用关联数组的关键,在PHP文件所做的:) – bboydev