【问题标题】:How to load JSON data with jQuery, PHP and MySQL如何使用 jQuery、PHP 和 MySQL 加载 JSON 数据
【发布时间】:2012-02-24 14:26:24
【问题描述】:

我想创建一个动态下拉菜单,其中一个选择基于另一个选择的值。我试了很多次,都失败了。我的代码如下。任何人都可以帮助我找出问题所在。

//模板:

<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 />

另一个用于返回数据库返回值的文件:

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

【问题讨论】:

  • 当你说你失败了,你是什么意思?您有任何可以发布的错误消息吗?
  • 是否有任何脚本错误?您似乎指的是未初始化的变量 json $.each(json,function(index,array){
  • json 变量一样,select 变量没有在您发布的代码中初始化。
  • 注意:未定义变量:第 47 行 /Users/alexhu/Work/menagerie/trunk/apps/utilities/modules/group_utilization/actions/actions.class.php 中的组类型

标签: php javascript jquery mysql


【解决方案1】:

您的 PHP 脚本是否为 JSON 发送适当的标头?

试着把这个juste放在“echo json_encode($groups);”之前。 最终发出退出调用以避免额外的输出。

$groups = $db->getResultsForQuery($query, $grouptypes);
header('Content-type:application/json;charset=utf-8');
echo json_encode($groups);
exit();

【讨论】:

    【解决方案2】:

    最上面的代码块应该是:

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

    【讨论】:

    • $(document).ready(function(){});$(function () {}); 完全相同。以下是文档:api.jquery.com/ready
    【解决方案3】:

    你需要在追加之前使用 jQuery var 引用标签:

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

    【讨论】:

    • 嗨,罗恩。感谢您的回答,但它也不起作用。它无法获取 Json 传递的值,并且 isset($_GET["grouptypes"]) 为 false。我很困惑
    • 您不想在 $.each(json... “isset”操作。
    【解决方案4】:

    您可能对 url_for() 功能的方式有疑问,因为它可能无法正确输出您的链接以供 getJSON 使用。例如,如果我摆弄一些接近你的代码的东西(顺便说一句,你在使用 Symphony 吗?)

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

    我的 JS 代码中有这个链接

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

    这显然不是我想要访问的链接。另外,请确保在您的 PHP 代码末尾添加一个分号,然后再试一次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-22
      相关资源
      最近更新 更多