2012-07-17 111 views
5

我真的一直在尋找近2個小時,還沒有找到一個很好的例子來說明如何將JSON數據從PHP傳遞給JS。我在PHP中有一個JSON編碼腳本,它回顯了一個JSON腳本,看起來或多或少像這樣(僞代碼)。如何從PHP到JS獲取JSON?

{ 
"1": [ 
    {"id":"2","type":"1","description":"Foo","options:[ 
    {"opt_id":"1","opt_desc":"Bar"}, 
    {"opt_id":"2","opt_desc":"Lorem"}], 
    {"id":"3","type":"3","description":"Ipsum","options:[ 
... 
"6": 
    {"id":"14","type":"1","description":"Test","options:[ 
... 
etc 

問題是,我該如何使用JavaScript獲取這些數據?我的目標是製作一個基於這些JSON數據生成投票的.js腳本,但我誠實地向上帝找不到有關如何執行此操作的任何示例。猜測它是這樣的:

Obj jsonData = new Object(); 
jsonData = $.getJson('url',data,function()){ 
    enter code here 
} 

任何好的例子或類似的鏈接將不勝感激。我認爲,在PHP中的數據進行編碼是最棘手的部分...

編輯:

我得到這個代碼段的工作,這樣我就可以在JS審查我的整個JSON數據。但是現在我似乎無法弄清楚如何獲得內部數據。它確實打印了階段編號(1-6),但我無法弄清楚如何獲取問題數據,然後再次查看每個問題中的選項數據。我是否必須嘗試嵌套每個循環?

$(document).ready(function() 
    {  
     $('#show-results').click(function() 
     { 
      $.post('JSAAN.php', function(data) 
      { 
       var pushedData = jQuery.parseJSON(data); 
       $.each(pushedData, function(i, serverData) 
       { 
        alert(i); 
       }) 
      }) 
     }) 
    }); 

這裏的想法是進入處於中等水平的問題信息,並打印出qusetion描述,然後根據問題類型 - 通過選項循環(如果有的話)創建複選框/單選,組然後再討論下一個問題。第一個數字代表我目前正在進行的多階段民意調查的哪個階段。我的計劃是通過隱藏/顯示各種div直到通過Ajax提交表單的最後一頁,將它分成6個階段。

回答

6

不知道,但我認爲,你可以使用

$.getJSON('url', data, function(jsonData) {      
    // operate on return data (jsonData)  
}); 

現在你可以訪問和PHP的JSON數據進行操作, 如果你要使用它的getJSON之外的電話,你可以把它分配給可變

var neededData; 
$.getJSON('url', data, function(jsonData) { 
    neededData = jsonData; 
});  
+0

這是deffo我需要什麼,我只需要使它工作的xD試圖把裏面的getJSON警報,但它永遠不會被激活。 – Tom 2012-07-17 06:48:11

+1

我認爲在函數(jsonData)){}中有一個括號錯誤,應該是函數(jsonData){no?不能讓任何一個人工作,只是要錘擊它一段時間:) – Tom 2012-07-17 06:49:08

+0

是啊,你是正確的額外括號:) – Leon 2012-07-17 07:15:33

5

嘗試jQuery的文檔:http://api.jquery.com/jQuery.getJSON/

這個例子應該讓你開始:

$.getJSON('ajax/test.json', function(data) { 
    var items = []; 

    $.each(data, function(key, val) { 
    items.push('<li id="' + key + '">' + val + '</li>'); 
    }); 

    $('<ul/>', { 
    'class': 'my-new-list', 
    html: items.join('') 
    }).appendTo('body'); 
}); 

這個例子是基於JSON結構的;

{ 
    "one": "Singular sensation", 
    "two": "Beady little eyes", 
    "three": "Little birds pitch by my doorstep" 
} 
+0

啊,不錯,非常感謝:)這適用於$ .getJSON('json.php')以及? – Tom 2012-07-17 06:26:50

+0

是的,只需要替換你需要的任何URL - 由PHP返回的數據必須是JSON編碼的。 json_encode(); – ajtrichards 2012-07-17 06:29:33

3

不要在PHP中使用echo。它將打印字符串而不是JSON。使用將JSON傳遞給javascript。

使用可以使用each在JavaScript結束時獲取JSON中的值。

http://www.darian-brown.com/pass-a-php-array-to-javascript-as-json-using-ajax-and-json_encode/

+0

啊歡呼!主要是印刷只是爲了看到我的語法正確,但總是很好的知道。 – Tom 2012-07-17 06:26:39

+1

我給出了一個示例鏈接。覈實。 – 2012-07-17 06:28:57

+0

我是否仍然需要在本例中回顯json_encode? http://www.darian-brown.com/pass-a-php-array-to-javascript-as-json-using-ajax-and-json_encode/ – Tom 2012-07-17 06:54:43

2

如果您正在使用JQuery有一個非常簡單的解決方案,你的方法,你可以在這裏看到:http://api.jquery.com/jQuery.getJSON/

否則我只是想讓你解釋一下,當你在上面的代碼中嘗試時,沒有辦法直接用JavaScript訪問你的JSON。重點是,當您的PHP腳本在您的服務器上運行時,JavaScript在您的瀏覽器上運行。所以肯定有他們之間的溝通。所以你必須通過http請求來自服務器的數據,我會建議。

HTH

+0

我以爲.getJson函數是一個Ajax驅動的函數,可以從任何文件中獲取Json數據?我真的不知道如何使用它,我覺得這很混亂。我欣賞你的回答:) – Tom 2012-07-17 06:53:02