如何使用 jQuery、PHP 和 MySQL 加载 JSON 数据

Posted

技术标签:

【中文标题】如何使用 jQuery、PHP 和 MySQL 加载 JSON 数据【英文标题】:How to load JSON data with jQuery, PHP and MySQL 【发布时间】: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 中的组类型 【参考方案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 代码末尾添加一个分号,然后再试一次。

【讨论】:

以上是关于如何使用 jQuery、PHP 和 MySQL 加载 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP、MySQL 和 Jquery 创建测验

如何根据使用 jQuery/AJAX 和 PHP/MySQL 选择的第一个下拉列表填充第二个下拉列表?

使用Jquery和PHP单击保存按钮时如何将多个表行更新为mysql表?

jquery - 如何使用通过 AJAX 从 MySQL 和 PHP 检索的数据将图像添加到 Select2 下拉列表?

使用 Jquery、AJAX 和 PHP 从 MySQL 数据库中检索数据

如何在 PHP / MySQL 中使用 jQuery SlickGrid(加载服务器数据并保存更改)