我正在尝试使用jquery ajax php创建一个Facebook和Twitter风格的提及系统,但是如果我尝试@提及超过一个用户,就会遇到问题。例如,如果我开始输入如下内容:
Hi @stack how are you.
显示@stack的结果,但如果我尝试提及这样的另一个用户:
Hi @stack how are you. i am @azzo
然后结果一无所获。我想念我的Ajax代码吗,有人可以帮助我吗?
我认为搜索user_name存在正则表达式问题。当我在第一个类似@stack
的用户名之后写一些用户名时,ajax请求发布此信息:
f : smen
menFriend : @stack
posti : 102
但是,如果我想用相同的文本标记其他朋友,就像这样:
Hi @stack how are you. I am @a
,然后ajax请求如下所示:
f : smen
menFriend : @stack, @a
posti : 102
所以我要说的是,显然,ajax会查询以@开头的所有单词。它需要做的是查询数据库中的最后一个@mention。
var timer = null;
var tagstart = /@/gi;
var tagword = /@(\w+)/gi;
$("body").delegate(".addComment", "keyup", function(e) {
var value = e.target.value;
var ID = e.target.id;
clearTimeout(timer);
timer = setTimeout(function() {
var contents = value;
var goWord = contents.match(tagstart);
var goname = contents.match(tagword);
var type = 'smen';
var data = 'f=' +type+ '&menFriend=' +goname +'&posti='+ID;
if (goWord.length > 0) {
if (goname.length > 0) {
$.ajax({
type: "POST",
url: requestUrl + "searchuser",
data: data,
cache: false,
beforeSend: function() {
// Do Something
},
success: function(response) {
if(response){
$(".menlist"+ID).show().html(response);
}else{
$(".menlist"+ID).hide().empty();
}
}
});
}
}
}, 500);
});
这也是一个用于从数据库搜索用户的php部分:
$searchmUser = mysqli_real_escape_string($this->db,$searchmUser);
$searchmUser=str_replace("@","",$searchmUser);
$searchmUser=str_replace(" ","%",$searchmUser);
$sql_res=mysqli_query($this->db,"SELECT
user_name, user_id
FROM users WHERE
(user_name like '%$searchmUser%'
or user_fullname like '%$searchmUser%') ORDER BY user_id LIMIT 5") or die(mysqli_error($this->db));
while($row=mysqli_fetch_array($sql_res,MYSQLI_ASSOC)) {
// Store the result into array
$data[]=$row;
}
if(!empty($data)) {
// Store the result into array
return $data;
}
答案 0 :(得分:1)
好像您要发送的数组是AJAX请求中match
的结果。
尽管我无法对其进行测试,但是您可以在正则表达式中使用前瞻性,并使用结果数组中的第一个元素。负前瞻(?!.*@\w)
用于确保我们仅匹配最后一个元素。
var timer = null;
var tagword = /@(\w+)(?!.*@\w)/;
$("body").delegate(".addComment", "keyup", function(e) {
var value = e.target.value;
var ID = e.target.id;
clearTimeout(timer);
timer = setTimeout(function() {
var contents = value;
var type = 'smen';
var goname = contents.match(tagword);
if (goname != undefined) {
var data = 'f=' +type+ '&menFriend=' +goname[1] +'&posti='+ID;
$.ajax({
type: "POST",
url: requestUrl + "searchuser",
data: data,
cache: false,
beforeSend: function() {
// Do Something
},
success: function(response) {
if(response){
$(".menlist"+ID).show().html(response);
} else {
$(".menlist"+ID).hide().empty();
}
}
});
}
}, 500);
});