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

使用Typeahead&Bloodhound时如何在请求正文中发送数据?

颛孙哲
2023-03-14
问题内容

我正在尝试实现一种预输入,其来源是一个API,该API希望使用GET请求,该请求具有数据主体,而不是url编码数据。我在“准备”对象中尝试了一些其他操作,但是无法将其用于url编码参数。是否可以使用typeahead或一般的jquery使其不执行此操作?我有一种感觉jquery可能只是不允许您这样做,因为这被认为是“不好的做法”,但是更改API并不是真正的选择!这是我的代码:

$(document).ready(function(){
  var people = new Bloodhound({
  datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  remote: {
    url: 'apiUrl',
    prepare: function (query, settings) {
                      settings.type = "GET";
                      settings.contentType = "application/json";
                      settings.DataType = "json";
                      settings.processData = false;
                      settings.data = JSON.stringify({"search":"people","query":query});
                      return settings;
                   }
    }
  });
  $('.typeahead').typeahead(null, {
    source: people
  });
})

我正在使用jquery 1.11.3&typeahead.js 0.11.1。

谢谢!


问题答案:

尝试使用typeahead.js
substringMatcher函数.on(),,input事件的最小修改版本

var substringMatcher = function(strs, q, cb) {

  return (function(q, cb, name) {

    var matches, substrRegex;

    // an array that will be populated with substring matches

    matches = [];

    // regex used to determine if a string contains the substring `q`

    substrRegex = new RegExp(q, 'i');

    // iterate through the pool of strings and for any string that

    // contains the substring `q`, add it to the `matches` array

    $.each(strs, function(i, str) {

      if (substrRegex.test(str)) {

        // the typeahead jQuery plugin expects suggestions to a

        // JavaScript object, refer to typeahead docs for more info

        matches.push(name(str));

      }

    });

    cb(matches);

  }(q, cb, function(res) {

    return res

  }));

};





$("#typeahead").on("input", function(e) {

  $.ajax({

      url: "https://gist.githubusercontent.com/guest271314/"

           + "ffac94353ab16f42160e/raw/"

           + "aaee70a3e351f6c7bc00178eabb5970a02df87e9/states.json",

      processData:false,

      data: JSON.stringify({

        "search": "people",

        "query": e.target.value

      })

    })

    .then(function(json) {

      if (e.target.value.length) {

        substringMatcher(JSON.parse(json), e.target.value, function(results) {

          $("#results ul").empty();

          $.map(results, function(value, index) {

            $("#results ul")

            .append($("<li />", {

              "class": "results-" + index,

              "html": value

            }))

          })

        })

      } else {

        $("#results ul").empty();

      }

    }, function err(jqxhr, textStatus, errorThrown) {

      console.log(textStatus, errorThrown)

    })

});


<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">

</script>

<input type="text" id="typeahead" placeholder="search" />

<br />

<div id="results">

  <ul>

  </ul>

</div>


 类似资料:
  • 问题内容: 我正在向本地部署并使用JAVA Spark创建的本地服务发出POST请求。 我想使用进行POST调用时在请求正文中发送一些数据,但是每次JAVA Spark中的请求正文为null时。 下面是我为此使用的代码 Java Spark POST服务处理程序 HTTPClass进行POST调用 问题答案: 您应该仅在将参数写入主体后才调用,而不是之前。您的代码应如下所示:

  • 问题内容: 我正在使用的服务API具有给定的GET方法,该方法要求将数据发送到请求的正文中。 正文中所需的数据是用连字符分隔的ID列表,并且可能非常大,因此必须在正文中发送,否则可能会在浏览器/代理/网络服务器等链中的某处出现foobar。请注意,我无法控制服务或API,因此请不要提出更改建议。 我正在使用以下jQuery代码,但是在提琴手中观察请求/响应,尽管我将“ processData”选项

  • 问题内容: 这些组合似乎无效。 头由于某种原因未设置。 问题答案: 只需直接发送xml字节即可: 输出量

  • 我尝试使用(version4.0)调用api来提交一些数据。我想请求已经成功了。但我遇到的麻烦是,当进行调用时,我从服务器得到一个0字节失败的响应。 我已经尝试了StackOverflow上当前的许多解决方案,但找不到解决方案。谢谢你的帮助。 以下是我的设置:

  • 问题内容: 我是Objective-c的新手,从最近开始,我就在请求/响应中投入了大量精力。我有一个工作示例,可以调用url(通过http GET)并解析返回的json。 下面的工作示例 我的第一个问题是-这种方法会扩大规模吗?还是这不是异步的(意味着我在应用程序等待响应时阻止了UI线程) 我的第二个问题是-如何修改请求的一部分以执行POST而不是GET?是否只是像这样修改HttpMethod?