我正在尝试使用 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;
}