2011-08-31 70 views
12

如果這個解釋不清楚,我很難理解。 如何使用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的最佳方式是什麼?

回答

19

嘗試:

$.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

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

回報JSON本身,然後通過循環在JSON構建JS數組如下:

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

或者你可以簡單地與json本身一起工作,需要數組的任何理由?

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

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,這是我們可以用數組操作的地方。但是,一定要送響應JSON格式在你的PHP,使用jsonResponse功能,可以很容易地使用,例如,你的PHP函數可以是這個樣子:

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

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

我認爲這應該做到這一點!

8

我在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

相關問題