2012-02-01 36 views
7

Tôi muốn tạo một menu thả xuống động mà người dùng chọn dựa trên giá trị của một lựa chọn khác. Tôi đã thử rất nhiều lần và thất bại. Tôi có mã như sau. Bất cứ ai cũng có thể giúp tôi tìm ra vấn đề là gì.Cách tải dữ liệu JSON bằng jQuery, PHP và MySQL

// mẫu:

<script type="text/javascript"> 

$(function(){ 
    getSelectVal(); 
    $("#grouptypes").change(function(){ 
     getSelectVal(); 

    }); 
}); 

function getSelectVal(){ 
    $.getJSON('<?php echo url_for('group_utilization/GroupModification') ?>', {'grouptypes':$("#grouptypes").val()},function(data){ 
     var groups = $("#groups"); 
     $("option",groups).remove(); 
     $.each(json,function(index,array){ 
      var option = "<option value='"+array['id']+"'>"+array['title']+"</option>"; 
      select.append(option); 
     }); 
    }); 
} 

</script> 

GroupType: <select id="grouptypes"> 

    <?php foreach($grouptypes as $type) : ?> 

    <?php echo "<option value='" . $type->name . "'>" .$type->name. "</option>"; ?> 

    <?php endforeach ?> 

</select><br /> 
<br />Result:<span id="list-of-groups"></span> 

<br /> 
Group: <select name="group" id="groups"> 

</select><br /> 

Một tập tin trả lại cơ sở dữ liệu giá trị trả về:

if(isset($_GET["grouptypes"])){ 
$grouptypes = $_GET["grouptypes"]; 

$query = "SELECT g.name FROM groups g INNER JOIN group_types gt ON(gt.id = g.group_type_id AND gt.name = ?)"; 

$groups = $db->getResultsForQuery($query, $grouptypes); 
echo json_encode($groups); 
} 
+1

Khi bạn nói bạn thất bại, ý của bạn là gì? Bạn có bất kỳ thông báo lỗi nào bạn có thể đăng không? – Crashspeeder

+1

Có bất kỳ lỗi tập lệnh nào không? Bạn dường như đang đề cập đến một biến jinit '$ .each (json, function (index, array) {' –

+0

Cũng như biến 'json', biến' select' không được khởi tạo trong mã bạn đã đăng – Jasper

Trả lời

0

nên khối hàng đầu của mã thực sự là:

$(document).ready(function(){ 
    getSelectVal(); 
    $("#grouptypes").change(function(){ 
     getSelectVal(); 

    }); 
}); 
+0

'$ (document) .ready (function() {}); 'là chính xác giống như' $ (function() {}); '. Đây là các tài liệu: http://api.jquery.com/ready/ – Jasper

0

Bạn cần phải tham khảo thẻ với jQuery var trước khi thêm:

function getSelectVal(){ 
    var select = $("#grouptypes"); 

    $.getJSON('<?php echo url_for('group_utilization/GroupModification') ?>', {'grouptypes':$("#grouptypes").val()},function(data){ 
    var groups = $("#groups"); 
    $("option",groups).remove(); 
    $.each(data,function(index,array){ 
     var option = "<option value='"+array['id']+"'>"+array['title']+"</option>"; 
     select.append(option); 
    }); 
    }); 
} 
+0

Xin chào, Ron. Cảm ơn câu trả lời của bạn, nhưng nó không hoạt động, không thể lấy giá trị được truyền bởi Json và isset ($ _ GET ["grouptypes"]) là false. Tôi bị nhầm lẫn –

+0

Bạn không muốn sử dụng đối số "dữ liệu" đã qua thay vì "json" trong $ .each (json ... - Tôi đã thay đổi để trả lời ở trên để phản ánh thay đổi này. Hy vọng rằng điều này sẽ giải quyết hoạt động "isset". –

0

Bạn có thể gặp sự cố với cách url_for() hoạt động vì không thể xuất liên kết của bạn đúng cách để getJSON sử dụng. Ví dụ nếu tôi fiddle với một cái gì đó gần với mã của bạn (BTW, bạn đang sử dụng Symphony?)

$.post("<? echo 'server.php';?>", function(data) { 
        aler(data); 

        }); 

      }); 

tôi nhận được liên kết này trong mã JS của tôi

http://dev.wonderland/%3C?%20echo%20'server.php'?%3E 

mà rõ ràng là không liên kết Tôi cố gắng tiếp cận. Ngoài ra, hãy đảm bảo thêm dấu chấm phẩy ở cuối mã PHP của bạn trên đó và thử lại.

1

Tập lệnh PHP của bạn có gửi tiêu đề thích hợp cho JSON không?

cố gắng đặt chú thích này trước "echo json_encode ($ groups);". Cuối cùng, hãy thực hiện cuộc gọi thoát để tránh thêm đầu ra.

$ groups = $ db-> getResultsForQuery ($ query, $ grouptypes);
tiêu đề ('Loại nội dung: application/json; charset = utf-8');
echo json_encode ($ groups);
lối ra();

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