当前位置: 首页 > 面试题库 >

单击时使用Javason / Jquery和Json数据填充选择框选项

钱弘壮
2023-03-14
问题内容

我仍在学习Jquery,并且对自己手中的任务有些困惑。

看起来像一个简单的任务…我有一个框,想要在单击时填充“选项”。我不希望仅在有人真正要求查看列表时在页面加载时填充它。同样,它只需填充一次。我真的不希望有人每次扩大名单时都发出请求。

我想我的Select元素中可能会有一个函数调用

<select id="usersList" name="usersList" onclick="getUsers()">

然后让一个Javascript getUsers()函数调用我的Json GetUsers()ActionMethod来获取该列表。怎么样 ?

就像是…?

function getUsers()
{
 getJSON("/Users/GetUsers", null, function (data){}
}

还是JQuery?…

$("usersList").click(
  $.getJSON("/Users/GetUsers", null, function (data) {}
  )

但是,我需要帮助,将所有内容放在一起。先感谢您!


问题答案:

这是我用来填充选择框的JavaScript。

$.getJSON("/Users/GetUsers", null, function(data) {
    $("#UsersList option").remove(); // Remove all <option> child tags.
    $.each(data.Users, function(index, item) { // Iterates through a collection
        $("#UsersList").append( // Append an object to the inside of the select box
            $("<option></option>") // Yes you can do this.
                .text(item.Description)
                .val(item.Id)
        );
    });
});

我建议您在页面加载时而不是在用户单击选择框时触发此操作。jQuery
AJAX默认情况下是异步的(应该是异步的),因此有一两分钟的选择框为空,这可能会使用户感到困惑。

这是您的问题范围吗?还是在MVC方面也需要帮助?如果您使用的是ASP.Net
MVC,则实际上是JsonResult的特定结果类型,这使创建JSON控制器方法更加简单,因为它们不需要相应的视图。它还允许您使用匿名数据结构,这使方法特定的投影更加简单。

编辑 这是返回上面的jQuery代码将理解的JSON结构的基本方法。请注意,属性u.Usernameu.ID取决于您的Users对象。

[HttpPost] 
public JsonResult GetUsers() { 
    return Json(new {
        Users = from u in _usersRepository.Get()
                select new { Description = u.Username, ID = u.ID }
    }); 
}

但是,我建议您尽快放弃这种方法,并使用标准的JSON消息结构。我使用的是这样的:

{
    Success: bool,
    LoggedIn: bool,
    ClientErrors: [
        { Number: int, Description: string, Parameter: string },
        { Number: int, Description: string, Parameter: string }...
    ],
    ServerErrors: [
        { Id: int, Message: string },
        { Id: int, Message: string }...
    ],
    Data: {}
}

这样做的原因如下:

  1. 没错,您的JSON方法库是各种协议,因此它受益于标准标头。
  2. 错误处理从中受益最大。具有一致的方法让用户知道出了什么问题对您而言是非常宝贵的。
  3. 区分客户端错误(用户名错误,密码错误等)和服务器错误(数据库离线)非常重要。一个用户可以修复,另一个则不能。
  4. 客户错误不仅应返回一条消息,还应返回导致该错误的方法中的参数(如果适用),以便您可以在相应的输入字段旁边轻松显示这些错误消息。
  5. 客户错误还应该提供唯一的编号(每种方法)以标识错误。这允许多语言支持。
  6. 服务器错误应提供所记录错误的ID。这样,您可以允许用户联系支持人员并参考他们遇到的特定错误。
  7. 登录的布尔值允许使用需要身份验证的方法的任何页面在必要时将用户轻松地重定向回登录屏幕,因为JSON方法的重定向操作结果将无效。
  8. 最后,“数据”字段是应提供方法特定数据的位置。

绝不要你考虑我的结构 做到这一点的方式。显然,您的应用程序需求可能与我的有很大不同。一致性,比任何特定的结构都重要。

编辑:06/01/2016-
看到人们仍然在看这个答案。关于填充下拉列表,我建议研究使用双向绑定框架。我个人更喜欢Knockout.JS,尽管Angular.JS也能做到,但它是如此的轻巧和轻便。除此之外,此答案的其余部分仍然是最新的。

编辑:2016 年8月10日-代码缺少逗号。



 类似资料:
  • 问题内容: 我较早前发布了一个问题,但运气不太好,我希望清除第二个下拉列表的内容并重新填充该下拉列表,具体取决于第一个下拉列表中的值。 我有以下选择框,如下所示: 在此下拉菜单下,我还为模型添加了另一个下拉菜单: onchange我想清除第二个下拉列表,并在其中填充与汽车品牌相关的模型。例如。 然后,我具有如下所示的PHP函数(我正在使用codeigniter)-该函数使用Car ID并返回所有模

  • 问题内容: 好的,这是我对Ajax的第一次尝试,它使我发疯,因为我实在无法绕开它。我想做的是在第一个框中用数据库中的客户填充,然后使用customerID通过select.php脚本从数据库中选择所有车辆ID。发生的情况是“客户”框被选中,但是选择客户时什么也没有发生。 这是我的Test.php文件: 这是我的select.php文件: 我正在尝试修改本教程以使用数据库,但到目前为止我没有成功。

  • 问题内容: 我正在用getJSON填充选择菜单。我想知道是否有一种方法可以使用jQuery的.each函数引入这些值? 当然,必须有一种更简单的方法来完成此操作……也许吗? PHP文件: jQuery: 我的json输出看起来像这样: 问题答案: 使用@RaYell的方法....这对我有用: 感谢大家在此方面的帮助!

  • 问题内容: 我想知道如何使用JSON填充表单吗? 我有一个使用php的JSON字符串, 并且我想使用JSON字符串填充表单控件(例如textarea或文本输入)。 我如何不使用外部插件(例如jQuery populate插件,我就看到了)来实现这一目标。 编辑:JSON格式: 这就是我从json_encode()得到的 问题答案: 此处存在问题,然后将其更改为开关值 使用它来为许多控件分配值:

  • 问题内容: 我有一个HTML表单,可以通过ajax保存到数据库中。为了获得键/值对的查询字符串,我使用了非常方便的函数,如下所示: 现在,我想加载一个空白表格,并用数据库中的数据重新填充它,该数据是通过ajax调用作为JSON字符串传递的。我已经能够获得具有正确键/值对的Javascript对象,如下所示: 重新填写表格的最简单,最优雅的方法是什么? 请记住,表单的输入元素是文本,选择,复选框和单

  • 问题内容: 当前,我们的开发团队使用这种模式,但是我不禁想知道是否存在更快或更有效的html方式来完成同一任务。 的HTML 这是Javascript: 问题答案: 这是我为此编写的函数。我不确定它是否比jQuery Templates更快。 它一次创建并附加一个Option元素,这可能比Templates慢 。我怀疑Templates会构建整个HTML字符串,然后一次创建所有DOM元素。那可能更