2011-08-29 49 views
1

更多的幫助,我還在努力讓使用JSON的PHP和jQuery的把握。使用JSON

我有查詢數據庫得到誰擁有即將到來的生日所有用戶頁面(忽略SQL,它只是在這個例子中)的代碼抓住數據庫返回,並把它變成一個數組,這看起來是這樣的:

Array (
[idnum] => Array (
    [0] => 3 
    [1] => 10 
    [2] => 74 
) 
[name] => Array (
    [0] => Betty Smith 
    [1] => Jim Pierce 
    [2] => Sam Smith 
) 
) 

我想把這個數據到一些jQuery來顯示在一個HTML select語句或類似的用戶,以便他們可以作出選擇,然後保留以備將來代碼/ AJAX的IDNUM。

我的代碼如下,在其整體:

<?php 
session_start(); 

$sql_server = 'xxxx'; 
$sql_db = 'xxxx'; 
$sql_username = 'xxxx'; 
$sql_password = 'xxxx'; 

$db = mysql_connect("$sql_server", "$sql_username", "$sql_password") or die ("Error connecting to database."); 
mysql_select_db("$sql_db", $db) or die ("Couldn't select the database."); 

list($currentdate) = mysql_fetch_row(mysql_query("SELECT currentdate FROM calendar",$db)); 

///////////////////////// 


$result = mysql_query("SELECT IDvalue, name FROM people where birthday => $currentdate",$db); 
$rowcheck = mysql_num_rows($result); 
//echo $rowcheck; 
$birthdays = array(); 
$i = '0'; 
while ($row = mysql_fetch_assoc($result)){ 
    foreach ($row as $col => $val){ 
     if ($col == 'IDvalue') { 
     //print " $val "; 
     $birthdays['idnum'][$i] = $val; 
     } 
     if ($col == 'name') { 
      $birthdays['name'][$i] = $val; 
     } 

    } 
    $i++; 

    } 


echo "</br></br><input type=\"button\" id=\"showbirthdays\" value=\"Show birthdays\"/>"; 
?> 
<html> 
<head> 
    </head> 
    <body> 

<script src="jquery.js" type ="text/javascript"></script> 

    <script> 
    $('#showbirthdays').click(function() { 

     var jsonobj = <?php echo json_encode($birthdays); ?>; 
     //alert (jsonobj) // this does not seem to work. just gives [object Object] 

     // Here's where i'm really lost. I would like to use jquery to display 
     // a select box that shows the name of birthday people, and uses their IDnum as an identifer for further code. 
     // some kind of foreach with an html.push, and then append to a div on the page...? 


     }); 
    </script> 

    </body> 


</html> 


} 
?> 

我非常希望看到究竟是如何搶了jQuery內的陣列中的數據,並使用它。或者,如果有人對移動數據有不同的建議,我對替代方案感興趣。

編輯:

$.each(jsonobj, function(){ 
      //Here `this` will point to each element of the object 
      alert (this); 
     }); 

偉大的作品,給我這樣的輸出: 「貝蒂·史密斯,吉姆·皮爾斯,薩姆·史密斯」。

$.each(jsonobj.name, function(){ 

這也適用,並且給了我與名獨立的輸出,

這裏的我在尋找什麼:

var html = []; 
html.push('<select name="birthdaynames" id="birthdayselect">') 
$.each(jsonobj, function(){ 
     html.push('<option name="asdf" id="this.IDnum">' + this.name + '</option>')  

     }); 
html.push('</select>') 
$('#showbirthdays').append(html.join('')); 

我如何使用這些特定值(此)?

+1

不是一個答案,但一個提示:使用引號的變量(例如「$ var」)被認爲是非常糟糕的風格。 – str

+2

jsonobj是一個實際的js對象,所以警報是正確的。試試'alert(jsonobj.name [0])',你會看到第一個名字 – Einacio

+0

@jeremy:當你做'$ .each(jsonobj,function(){','this'是每個數組(idnum,then名字),你需要做的是在每個數組上面加上'$ .each'。查看我的答案舉例。 –

回答

1

[object Object]是正確的,當你試圖提醒一個JavaScript對象。

嘗試alert(jsonobj.idnum)alert(jsonobj.name)。您可以使用$.each循環訪問數據。

var $sel = $('<select name="birthdaynames" id="birthdayselect">'); 
$.each(jsonobj.idnum, function(i,v){ 
    var name = jsonobj.name[i]; 
    var $opt = $('<option/>').val(v).text(name); 
    $sel.append($opt); 
}); 
$('#showbirthdays').append($sel); 
+0

返回[array Array] – Einacio

+0

@Einacio:不,它不會。逗號 –

+1

你是對的,抱歉,我正在處理另一種語言,並將它混合起來 – Einacio

0

你可以簡單地做

jsonobj.your_array_key; 

訪問JSON對象的數據轉換爲JavaScript。 如果您有任何數組,那麼就去做jQuery的每一個與它。

3

如果<?php echo json_encode($birthdays); ?>寫了一個很好的形式JS數組或對象,那麼你可以直接使用它作爲

var jsonobj = <?php echo json_encode($birthdays); ?>; 

alert jsonobj是給你[[object Object]因爲它是一個JavaScript對象。你可以試着提醒jsonobj.length如果它是一個數組。

您可以通過這個對象循環使用$.each循環。

var html = []; 
html.push('<select name="birthdaynames" id="birthdayselect">') 
$.each(jsonobj, function(){ 
    html.push('<option value="'+this.IDvalue + '">' + this.name + '</option>')  
}); 
html.push('</select>') 
$('#showbirthdays').append(html.join('')); 
+0

非常有幫助,謝謝。因爲我的數組是多維的,所以我看到alert(this)給了我所有名稱的提示,然後如何更有效地處理這個問題來創建一個html選擇?我正在修改上面的問題來反映。 – jeremy

+0

@jeremy - 看看我編輯的答案。我相信你有'IDnum'屬性如果不是,則用相應的名稱替換它。同樣對於'option'元素,你不需要'name'屬性和'id'(僅當你想通過id來選擇) – ShankarSangoli

+0

這會創建select,但是選項顯示爲 jeremy