如何使用 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 数据的主要内容,如果未能解决你的问题,请参考以下文章
如何根据使用 jQuery/AJAX 和 PHP/MySQL 选择的第一个下拉列表填充第二个下拉列表?
使用Jquery和PHP单击保存按钮时如何将多个表行更新为mysql表?
jquery - 如何使用通过 AJAX 从 MySQL 和 PHP 检索的数据将图像添加到 Select2 下拉列表?