大家好,我的ajax标签搜索系统有一个问题。以下代码正常工作只需一个搜索标记。但是,如果我搜索多个标签,那么它就无法正常工作。我需要做什么?我所缺少的任何人都可以帮助我吗?
例如:当我写#innovation时,ajax会显示#innovation但是当我搜索多个标签,例如 #innovation 询问 #stoveroverflow 时,它不会搜索< EM> #stackoverflow
$(document).ready(function() {
var start=/#/ig;
var word=/#(\w+)/ig;
$("#contentbox").live("keyup",function() {
var content=$(this).text();
var go= content.match(start);
var name= content.match(word);
var dataString = 'searchword='+ name;
if(go!==null && go.length!==0) {
$("#msgbox").slideDown('show');
$("#display").slideUp('show');
$("#msgbox").html("Type the name of someone or something...");
if(name!==null && name.length!==0) {
$.ajax({
type: "POST",
url: "boxsearch.php",
data: dataString,
cache: false,
success: function(html) {
$("#msgbox").hide();
$("#display").html(html).show();
}
});
}
}
return false;
});
});
我认为问题出在以下几行:
var start=/#/ig;
var word=/#(\w+)/ig;
答案 0 :(得分:2)
有一百万种不同的方法来破解这个坚果。我过去使用的一种方法是将整个输入作为服务调用的单个属性发送,然后使用MySQL的REGEX功能将其传递给db调用(通过PHP)。使用该功能,它搜索值1,值2或值1和值2等的任意组合。
但是当你正在做的时候让我们从前端攻击它。您有一个输入作为&#34; #word1#word2&#34;的组合。所以,而不是做正则表达式的summersaults来找到开始和结束,如何简化事情并在&#34;#&#34;上做一个string.split()。字符。您可以获取生成的值数组,循环以创建服务调用字符串(不要忘记修剪空格)并发送呼叫。
答案 1 :(得分:1)
问题是来自你的正则表达式。第二个你在textarea写了第二个单词(我假设你正在使用textarea),if条件失败了。
我不是正则表达式专家,但我有一个js解决方案:
var keywords = $(this).val().split(' ').trim();
以这种方式获取所有关键字,然后遍历每个关键字并检查它是否是正确的标记。
var obj = [];
keywords.forEach(function (content) {
var go = content.match(start);
var name = content.match(word);
//check to see if the searchword is valid.
//If it is we add it to the list and continue the loop.
//If not we ignore it and continue the loop.
//If you want to stop the loop when one searchword is wrong add "return false;"
if(go !== null && go.length > 0 && name !== null && name.length > 0 ){
obj.push(name);
}
});
if(obj.length > 0){
var dataString = JSON.stringify(obj);
//do ajax call here
}
我还假设您将所有搜索词一次性发送到您的php文件。
编辑:将所有有效的关键字推送到数组obj
中,稍后将其解析为JSON字符串。