Я пытаюсь создать систему упоминаний в стиле Facebook и Twitter, используя jquery ajax php, но у меня возникает проблема, если я пытаюсь упомянуть более одного пользователя.Например, если я начинаю набирать что-то вроде следующего:
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;
}