2012-07-17 45 views
5

Tôi thực sự đã tìm kiếm gần 2 giờ và chưa tìm thấy một ví dụ hay về cách chuyển dữ liệu JSON từ PHP sang JS. Tôi có một tập lệnh mã hóa JSON trong PHP để lặp lại một kịch bản JSON trông giống như thế này (mã giả).Làm cách nào để nhận JSON từ PHP sang JS?

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

Vấn đề là làm cách nào để lấy dữ liệu này bằng JavaScript? Mục tiêu của tôi là tạo một tập lệnh .js tạo ra một cuộc thăm dò dựa trên các dữ liệu JSON này, nhưng tôi thành thật với thần không thể tìm thấy bất kỳ ví dụ nào về cách thực hiện điều này. Đoán nó là một số điều gì đó như:

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

Bất kỳ liên kết nào đến bất kỳ ví dụ hay tương tự nào đều sẽ được đánh giá cao. Và tôi nghĩ rằng mã hóa dữ liệu trong PHP là phần khó khăn ...

EDIT:

Tôi có đoạn mã này để làm việc, vì vậy tôi có thể xem lại toàn bộ dữ liệu JSON của tôi trong JS. Nhưng bây giờ tôi dường như không thể tìm ra cách để có được các dữ liệu bên trong. Nó in ra số giai đoạn (1-6) nhưng tôi không thể tìm ra cách để có được dữ liệu câu hỏi, và sau đó một lần nữa các dữ liệu tùy chọn trong mỗi câu hỏi. Tôi có phải thử nghiệm với lồng nhau mỗi vòng?

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

Ý tưởng ở đây là để có được vào các thông tin câu hỏi ở mức trung bình và in ra các mô tả qusetion, sau đó dựa vào loại câu hỏi - vòng lặp qua các tùy chọn (nếu có) để tạo checkbox/RadioButton nhóm trước khi tiếp tục câu hỏi tiếp theo. Số đầu tiên đại diện cho giai đoạn nào của cuộc thăm dò đa giai đoạn mà tôi hiện đang làm việc. Kế hoạch của tôi là chia nó thành 6 giai đoạn bằng cách ẩn/hiển thị các div khác nhau cho đến trang cuối cùng nơi biểu mẫu được gửi qua Ajax.

Trả lời

6

Không chắc nhưng tôi nghĩ rằng, bạn có thể sử dụng

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

bây giờ bạn có thể truy cập và hoạt động trên dữ liệu PHP json, nếu bạn đang đi để sử dụng nó ngoài getJSON gọi bạn có thể gán nó vào một biến

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

Đây là điều tôi cần, tôi chỉ cần thực hiện công việc xD Đã thử đặt cảnh báo bên trong getJson nhưng nó không bao giờ kích hoạt. – Tom

+1

Tôi nghĩ rằng có một lỗi ngoặc đơn trong hàm (jsonData)) {, nên là hàm (jsonData) {no? Không thể có được một trong hai để làm việc mặc dù, chỉ sẽ búa vào nó một lúc :) – Tom

+0

yeah, bạn đang đúng về dấu ngoặc đơn thêm :) – Leon

5

Thử tài liệu jQuery: http://api.jquery.com/jQuery.getJSON/

Ví dụ này sẽ giúp bạn bắt đầu:

$.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'); 
}); 

Ví dụ này dựa trên cấu trúc JSON;

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

Ahh tốt đẹp, cảm ơn rất nhiều :) Điều này làm việc cho $ .getJSON ('json.php') là tốt? – Tom

+0

Chỉ thay thế bất kỳ URL nào bạn cần - dữ liệu được trả về bởi php sẽ phải được mã hóa JSON. json_encode(); – ajtrichards

3

Không sử dụng tiếng vọng trong PHP. Nó sẽ in chuỗi không phải JSON.

Sử dụng json_encode để chuyển JSON sang javascript.

Sử dụng có thể sử dụng each để nhận các giá trị trong JSON ở cuối javascript.

Ví dụ

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

+0

Ah chúc mừng! Chủ yếu là in ấn chỉ để thấy rằng tôi đã có cú pháp đúng, nhưng luôn luôn tốt để biết. – Tom

+1

Tôi đã đưa ra một liên kết mẫu. Kiểm tra nó. –

+0

Tôi vẫn cần phải echo json_encode mặc dù như trong ví dụ này? http://www.darian-brown.com/pass-a-php-array-to-javascript-as-json-using-ajax-and-json_encode/ – Tom

2

Nếu bạn đang sử dụng JQuery có một giải pháp thực sự đơn giản để tiếp cận của bạn như bạn có thể xem tại đây: http://api.jquery.com/jQuery.getJSON/.

Nếu không, tôi chỉ muốn bạn giải thích rằng không có cách nào để truy cập trực tiếp JSON của bạn bằng JavaScript như bạn đã thử trong mã ở trên. Điểm chính là, JavaScript chạy trên trình duyệt của bạn trong khi tập lệnh PHP chạy trên máy chủ của bạn. Vì vậy, chắc chắn phải có một thông tin liên lạc giữa chúng. Vì vậy, bạn phải yêu cầu dữ liệu từ máy chủ qua http tôi sẽ đề nghị.

HTH

+0

Tôi nghĩ rằng hàm .getJson là một hàm Ajax điều khiển có thể lấy dữ liệu Json từ bất kỳ tệp nào? Tôi đã thực sự không chắc chắn làm thế nào để sử dụng nó, tôi thấy điều này rất khó hiểu. Tôi đánh giá cao câu trả lời của bạn tuy nhiên :) – Tom

Các vấn đề liên quan