【问题标题】:jQuery and Auto-populat selectsjQuery 和自动填充选择
【发布时间】:2009-02-14 05:23:54
【问题描述】:

我有一个简单的页面,我可以在其中选择一个客户,然后一旦我选择了自动填充到属于该客户的项目中。我正在使用 PHP/MySQL 来提取结果。

我看了一下:http://remysharp.com/2007/01/20/auto-populating-select-boxes-using-jquery-ajax/,但我认为这从页面上的两个字段开始。我试图重新编写代码,但效果不佳。

 var client_id = $('#c_id').val();
    $.getJSON("../inc/get-projects.php", {id: client_id}, function(data){
        projects = $('#p_id');
        projects.empty();
        $.each(data, function() {
            var option = $('<option/>').attr('value', this.id).text(this.name);
            projects.append(option);
        });
    });

PHP:

<?php
    include "config.inc.php";
    $sth = mysql_query(
        sprintf(
        "SELECT c_id,p_id,p_title FROM projects WHERE c_id = %s",
        mysql_real_escape_string($_GET['id'])
        )
    );
    $projects = array();
    while($r = mysql_fetch_assoc($sth)) {
        $projects[] = array('id' => $r['p_id'], 'name' => $r['p_title']);
    }
    print json_encode($projects);
    exit;


?>

【问题讨论】:

  • 哦,我明白了。您看到我如何将变量命名为“$projects”,而您将变量命名为“projects”吗?您传递给函数的值已经被称为没有 $ 的项目,所以当您执行 projects = $('#p_id');您正在覆盖服务器的输出。我更新了我的答案。
  • 什么不能用它?获取 Firebug for Firefox 并检查服务器返回的内容。
  • Reponse: [] 它不向页面发送参数 Param: id 有什么想法吗?谢谢,瑞恩

标签: php javascript jquery auto-populate


【解决方案1】:

如果你有这样的 HTML:

<select id='clients'>...</select>
<select id='projects'>...</select>

你可以有这样的 jQuery 代码:

$(document).ready(function() {
    var $clients = $('#clients');
    $clients.change(function() {
        var client_id = $clients.val();
        $.getJSON("getProjects.php", {id: client_id}, function(projects) {
            $projects = $('#projects');
            $projects.empty();
            $.each(projects, function() {
                var option = $('<option/>').attr('value', this.id).text(this.name);
                $projects.append(option);
            });
        });
    });
});

然后让 getProjects.php 返回类似:

$sth = mysql_query(
    sprintf(
    "SELECT * FROM projects WHERE client_id = %s",
    mysql_real_escape_string($_GET['id'])
    )
);
$projects = array();
while($r = mysql_fetch_assoc($sth)) {
    $projects[] = array('id' => $r['id'], 'name' => $r['name']);
}
print json_encode($projects);
exit;

我还没有测试所有这些,但我认为它或多或少是你想要的。

edit - 经过测试并且有效,显然它可能不是您所需要的,但它让您知道如何去做。希望对您有所帮助。

edit 2 - 您的代码有问题:

$.getJSON("../inc/get-projects.php", {id: client_id}, function(projects){
    projects = $('#p_id');
    projects.empty();
    $.each(projects, function() {
        var option = $('<option/>').attr('value', this.id).text(this.name);
        projects.append(option);
    });
});

您正在用第二行中的projects 覆盖传递给函数的projects。我在我的代码中使用了$ 来区分两者,这可能不是最好的方法。要修复,请将代码更改为:

$.getJSON("../inc/get-projects.php", {id: client_id}, function(data){
    projects = $('#p_id');
    projects.empty();
    $.each(data, function() {
        var option = $('<option/>').attr('value', this.id).text(this.name);
        projects.append(option);
    });
});

【讨论】:

  • 不错 - 加倍努力!
  • 哇!谢谢你,让我处理这个并试一试。非常感谢,瑞恩
  • 到目前为止它的工作非常完美,但它在应该显示 JSON 内容的地方显示 p_id,PHP 正确加载数据,但我认为 jQuery 读取错误。 p_id = 您在示例中提供的 ID。
  • 所以当我的代码打印出来时,它看起来像: 并且没有加载我的数据。想法?
  • 你能用你正在使用的代码编辑你的问题吗?我测试了上面的内容并且它有效,所以我需要看看你改变了什么。您是否在 PHP 的 json_encode 中将 id 分配给 'id' 并将项目名称分配给 'name'?
猜你喜欢
  • 1970-01-01
  • 2012-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多