关于#jquery#的问题:当用户在id为keyword的input元素中输入内容时,利用jQuery的Ajax技术,筛选出后端data.json文件中包含用户输入内容的数据

请阅读下面的HTML内容,当用户在id为keyword的input元素中输入内容时,利用jQuery的Ajax技术,筛选出后端data.json文件中包含用户输入内容的数据。然后将筛选出的数据作为文本内容创建li元素并插入到id为list的ul标签中。
遇到的现象和发生背景,请写出第一个错误信息

<input id="keyword" type="text">
<div id="contain">
<ul id="list"></ul>
</div>

{
        "0": "Head First HTML与CSS",
        "1": "JavaScript高级程序设计",
        "2": "JavaScript DOM编程艺术",
        "3": "高性能网站建设进阶指南",
        "4": "高性能网站建设指南",
        "5": "Web前端黑客技术揭秘",
        "6": "JavaScript权威指南",
        "7": "精通CSS",
        "8": "编写可维护的JavaScript",
        "9": "高性能JavaScript"
}


运行结果及详细报错内容
我在第一步卡住了,input的值我用.val()获取不到
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

代码都没给,谁知道你哪里写错了

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    首先,我们需要准备好HTML和data.json文件。

    HTML文件如下:

    <!DOCTYPE html>
    <html>
    <head>
        <title>动态筛选JSON数据并插入HTML元素</title>
        <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
        <script src="script.js"></script>
    </head>
    <body>
        <h1>动态筛选JSON数据并插入HTML元素</h1>
        <label for="keyword">请输入关键词:</label>
        <input type="text" id="keyword">
        <ul id="list">
        </ul>
    </body>
    </html>
    

    data.json文件如下:

    [
      {"name": "张三", "age": 20},
      {"name": "李四", "age": 25},
      {"name": "王五", "age": 30},
      {"name": "赵六", "age": 35},
      {"name": "钱七", "age": 40}
    ]
    

    然后,在HTML文件中引入jQuery和我们写的JavaScript文件(script.js),在script.js文件中编写以下代码:

    // 获取id为"keyword"的input元素
    var keywordInput = $('#keyword');
    
    // 给input元素绑定输入事件
    keywordInput.on('input', function() {
      // 获取用户输入的关键词
      var keyword = keywordInput.val();
    
      // 发送Ajax请求
      $.ajax({
        url: 'data.json',  // 请求路径为data.json文件
        method: 'GET',  // 请求方式为GET
        data: {  // 向后端传递参数
          keyword: keyword
        },
        success: function(data) {  // 请求成功的回调函数
          // 清空id为"list"的ul元素
          var list = $('#list').empty();
    
          // 遍历筛选出的数据,将每个数据项作为文本内容创建li元素并插入到id为"list"的ul标签中
          for (var i = 0; i < data.length; i++) {
            var item = data[i];
            var name = item.name;
            var age = item.age;
            var li = $('<li>').text('姓名:' + name + ',年龄:' + age);
            list.append(li);
          }
        },
        error: function(jqXHR, textStatus, errorThrown) {  // 请求失败的回调函数
          console.log(textStatus, errorThrown);
        }
      });
    });
    

    代码说明:

    • 首先,我们获取id为"keyword"的input元素,并为其绑定输入事件;
    • 在输入事件处理函数中,获取用户输入的关键词,并发送Ajax请求;
    • 在Ajax请求中,我们指定请求路径为data.json文件,并向后端传递用户输入的参数;
    • 当请求成功返回时,在回调函数中清空id为"list"的ul元素,并遍历筛选出的数据,将每个数据项作为文本内容创建li元素并插入到id为"list"的ul标签中;
    • 如果请求失败,我们打印出错误信息。

    最后,将HTML、data.json和script.js三个文件放在同一目录下,并在浏览器中打开HTML文件,我们就可以动态筛选JSON数据并插入HTML元素了。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

根据您的描述,第一个错误信息可能是类似下面的内容:

Uncaught TypeError: $(...).val is not a function

这个错误表示在获取输入框的值时出现了问题,可能是因为代码中使用了错误的 jQuery 方法。

在使用 jQuery 的 Ajax 技术时,需要在 input 元素的值发生变化时触发 Ajax 请求,然后将返回的数据插入到页面中。可以使用以下代码实现:

$(document).ready(function() {
  // 监听 input 元素的值变化
  $('#keyword').on('input', function() {
    // 获取输入框的值
    var keyword = $(this).val();
    
    // 发送 Ajax 请求
    $.ajax({
      url: 'data.json',
      dataType: 'json',
      success: function(data) {
        // 筛选包含关键字的数据
        var filteredData = {};
        $.each(data, function(index, value) {
          if (value.indexOf(keyword) !== -1) {
            filteredData[index] = value;
          }
        });
        
        // 清空列表
        $('#list').empty();
        
        // 将筛选出的数据插入到列表中
        $.each(filteredData, function(index, value) {
          $('<li>').text(value).appendTo('#list');
        });
      },
      error: function(xhr, status, error) {
        console.log('Ajax error: ' + error);
      }
    });
  });
});

在上述代码中,我们首先监听了 input 元素的值变化事件,并在事件回调函数中获取输入框的值。然后,我们使用 jQuery 的 Ajax 方法向服务器请求数据,并在请求成功时筛选出包含关键字的数据。最后,我们清空列表并将筛选出的数据插入到列表中。

需要注意的是,代码中使用了 jQuery 的 val() 方法获取输入框的值,而不是 $().val()。如果您在代码中使用了 $().val(),可能会出现上述的错误信息。