【问题标题】:GetJSON jquery returns undefinedGetJSON jquery 返回未定义
【发布时间】:2020-06-30 17:31:36
【问题描述】:

我正在尝试让我的搜索框工作并在文本搜索和标题上执行 getJSON。但在控制台日志中,我得到 text=undefined?title=undefined。所以它不显示任何 JSON。不确定我的点击是否正常工作,或者我是否必须制作我的 JSON 对象?

脚本

 <script>
     var searchstring = $('input[type="text"]', this).val();
     var url = "https://data.edu/api/v1/metadata";

     url += "?text=" + searchstring;
     url += "?title=" + searchstring;


    $(document).ready(function() {
        $('button[type="button"]').click(function(event){

           $.ajax({
            type: "GET",
            url: url,

            success: function(res){
                console.log(res);
                  var items = res.data.metadata;
                  var ins = "";
                  for (var i = 0; i < items.length; i++){
                    ins += "<div>";
                    ins += "Title" + items[i].title;
                    ins += "Title" + items[i].title;
                    ins += "Title" + items[i].title;
                    ins += "</div><br />";
                  };
                  $('#results').html(ins);
                }

            });         
        });
     });

  </script>

html

              <form class="destinations-form"  role="search" >
                 <div class="input-line">
                    <input id="searchForm"  type="text"  class="form-input check-value" placeholder="Search Documents" />

                    <button type="button"  class="form-submit btn btn-special"  "</button>

                 </div>
              </form>
               <div class="container">
                  <div class="hero-text align-center">
                     <div id="results"></div>
                  </div>
              </div>

json

data: [
    {
        collection_id: "ADGM-1552427432270-483",
        metadata:{
                   year: "2019",
                   files: text ,
                   title: text,
                },

【问题讨论】:

    标签: javascript jquery html getjson buttonclick


    【解决方案1】:

    问题是因为您仅在页面首次加载时才从字段中读取值并且它是空的。要解决此问题,请将该逻辑移到 click 处理程序中。

    下一个问题是您应该从$('input[type="text"]', this) 中删除this。这里不需要上下文选择器,无论如何这个都是不正确的。

    另请注意,有效的查询字符串以? 开头并用&amp; 分隔每个值,因此您的url 连接需要稍微修改。此外,您不应在每次点击时更新 url 值。如果您这样做,您的 AJAX 请求将只工作一次。

    最后,您响应中的 metadata 是一个对象,而不是一个数组。 data 是数组,因此您需要对其进行循环。也可以使用map() 来简化循环。试试这个:

    $(document).ready(function() {
      const url = "https://data.edu/api/v1/metadata";
    
      $('button[type="button"]').on('click', function(e) {
        let searchstring = $('input[type="text"]').val();
        let requestUrl = url + `?text=${searchstring}&title=${searchstring}`;
    
        $.ajax({
          type: 'GET',
          url: requestUrl,
          success: function(res) {
            let html = res.data.map(item => `<div>Title ${item.metadata.title}</div><br />`);
            $('#results').html(html);
          }
        });
      });
    });
    

    【讨论】:

    • 所以我尝试了你的代码,但我仍然遇到同样的问题。它似乎仍然没有将搜索栏中的文本链接到 url。
    • 检查控制台是否有错误。当我向该域发出请求时,我收到一条错误消息,指出该站点不可用。
    • 谢谢,还有一个问题,我刚刚编辑了要解决的问题。测试为工作:jsfiddle.net/8k23nvqc.
    • 太棒了!谢谢!我知道这是另一个问题,但是当我按 Enter 时,它不会搜索任何内容。这是我必须打的另一个电话吗?
    • 不,那是因为您使用的是type="button" 控件。将其更改为type="submit",而不是侦听按钮的单击,而是更改您的jQuery代码以侦听formsubmit事件。这是一个如何做到这一点的例子:jsfiddle.net/v9jftzsb
    猜你喜欢
    • 2010-11-29
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    相关资源
    最近更新 更多