JQuery检查数组值是否在解析字段中

Parse.com JQuery check if array value is in parse field

本文关键字:字段 是否 检查 数组 JQuery      更新时间:2023-09-26

我正在为我的网站做一个搜索框,并想从头开始构建它(我知道我可能不应该,但这是一个学习练习)。

我正在从文本框中接收字符串,并使用Jquery自动完成功能来显示Parse的任何结果。

到目前为止,这工作正常,但当我输入一个字符串,包括我的数据库中的所有单词,但不是在正确的顺序,我没有得到任何结果。

。如果我搜索"新文章",它会显示文章,而如果我搜索"新文章",它不会显示。

我正在检索数据:

  ...
  var searchString = document.getElementById("tags").value; // Get the search string
  var str = searchString.split(" "); // Split it up into an array
  var Articles = Parse.Object.extend("Articles");
  var query = new Parse.Query(Articles);
  query.containedIn("title", str); // This part doesn't work.
  // query.contains("title", searchString); // I was using this and it works OK.
  query.find({ 
  ...
编辑:

使用bond建议的方法下面我的云代码是:

Parse.Cloud.define('searchArticles', function(request, response) {
console.log("About to request search terms"); // This never appears in cloud code logs
var input = request.params.searchTerms;
input = _.uniq(input);
input = _.filter(list, function(w) { return w.match(/^'w+$/); });
var searchQuery = new Parse.Query("Articles");
searchQuery.containedIn("titleArray", input);
  searchQuery.find().then(function(articles) {
    console.log("Success");
  }, function(err) {
    console.log("Failure");
  });
});

和我用来调用它的函数是:

$("#searchBox").keyup(function() {
var availableArticles = [];
var searchString = document.getElementById("tags").value;
var str = searchString.split(" ");
Parse.Cloud.run('searchArticles', {"searchTerms":str}, {
success: function(articles) {
  alert("Successful");
},
error: function(error) {
  alert("Unsuccessful");
}
});

注意,console.log中的任何一个都不会被写入,Parse.Cloud.run函数中的警报也不会出现。

云代码正在运行,因为它显示在解析云代码日志中。

对于搜索函数,您可以使用单独的数组列,例如keyWords。在这里,您将标题列中的关键字保存在Articles类的beforeSave函数中。然后你可以调用单独的搜索函数来搜索,而你输入搜索。像这样:

    Parse.Cloud.beforeSave("Articles", function(request, response) {
    // set/update Articles keywords
}
Parse.Cloud.define("searchArticles", function(request, response) {
    var input = request.params.query; //
    // optimizing input
    input = _.uniq(input);
    input = _.filter(list, function(w) { return w.match(/^'w+$/); });
    var searchQuery = new Parse.Query("AddressInfo");
    searchQuery.containsAll("keyWords", input);
    searchQuery.find().then(function(articles) {
        // return success response
    }, function(err) {
        // handle error
    });
}

您可以从客户端呼叫searchArticles

在云中运行containedIn等查询比在客户端上运行查询更快。