首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用mongoosastic + AJAX进行即时搜索?

如何使用mongoosastic + AJAX进行即时搜索?
EN

Stack Overflow用户
提问于 2015-11-25 10:08:17
回答 2查看 480关注 0票数 5

我已经成功地配置了mongoosastic,我尝试了搜索,而且它运行得很好,但是当涉及到前端时,我不太确定如何实现这个目标,我尝试了很多方法,但无法想出一个好的解决方案。

这是密码。

代码语言:javascript
复制
// For the Search API
    router.post('/api/search/', function(req, res, next) {
      Job.search(
        {
          query_string:
          { query: req.body.search }
        } , function(err, results) {
            if (err) return next(err);
            res.json(results);
        });
    });

因此,每当我搜索与“engineer”相关的信息时,我都会得到json数据。

所以后端确实工作得很好。

然而,当涉及到jquery和ajax时,我总是收到错误的请求。

逻辑:无论什么时候插入了什么东西,然后发布并找到结果。

以下是前端jquery代码。

代码语言:javascript
复制
  $('#search').keyup(function() {

    var search_term = $(this).val();


    $.ajax({
      type: "POST",
      url: "/api/search",
      success: function(){
        $('search_results').html(search_term);
      },
      error: function(data){
        alert('Error', data);
      }
    });

  });

HTML

代码语言:javascript
复制
<input type="text" class="form-control input-lg" id="search" name="search" placeholder="Search for part-time..." />



 <div id="search_results">


    </div>

如何将json结果插入search_results

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-27 18:14:32

你需要做的是

  1. 在每一次按键笔划上,获取输入值。
  2. 通过Ajax将其发送到后端
  3. 使用您在成功时得到的JSON (在这里,我们只在div中显示"title:薪水“)

所以你的前端代码应该是这样的:

代码语言:javascript
复制
$('#search').keyup(function() {

  // 1. grab the search term from the input field
  var search_term = $(this).val();

  // 2. send it to your back-end via ajax in the body 
  $.ajax({
    method: "POST",
    url: "/api/search",            // <-- your back-end endpoint
    data: "search=" + search_term  // <-- what you're sending
    dataType: "json",              // <-- what you're expecting back
    success: function(json){       // <-- do something with the JSON you get
      // 3. parse the JSON and display the results
      var res = json.hits.hits.map(function(hit) {
          return hit._source.title + ": " + hit._source.salary;
      });
      $('search_results').html(res.join("<br />"));
    },
    error: function(data){
      alert('Error', data);
    }
  });
});
票数 4
EN

Stack Overflow用户

发布于 2015-12-04 05:06:19

我现在正在做一些和这个非常相似的事情。首先,看起来在初始ajax请求中缺少参数,因此节点服务器没有获得任何信息:

代码语言:javascript
复制
$('#search').keyup(function() {
//Perform the ajax request
var search_term = $(this).val();
$.ajax({
  type: "POST",
  url: "/api/search",
  data: {"search": search_term},
  success: function(data) {
     //Loop over all the data and output it, appending data to element
     //with a line break
     for(var i=0; i < data.hits.length; i++)
    $('search_results').append(data.hits[i]._source.title+'<br />');
  },
  error: function(data){
    alert('Error', data);
  }
});

});

在调试这些问题时,如果您可以访问console.log()来查看它实际得到的数据,那么在我的节点服务器中使用它是非常有帮助的:

代码语言:javascript
复制
// For the Search API
router.post('/api/search/', function(req, res, next) {
  console.log("%j", req.body.search)
  Job.search(
    {
      query_string:
      { query: req.body.search }
    } , function(err, results) {
        if (err) return next(err);
        res.json(results);
    });
});

日志将非常清楚地报告未定义或所期望的正确字符串,这样您就可以查看参数是否正确。

您还可能希望检查节点服务器地址和端口(就像检查是否正常一样)。对于我的ajax请求,我必须将

代码语言:javascript
复制
url: "http://localhost:9200/api/search" 

在我的查询面前,仅仅是因为我的服务器位于另一个端口上

下面是有关jQuery post函数的更多信息,供您参考:

http://api.jquery.com/jquery.post/

希望这能有所帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33913617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档