Ajax если больше одного @mention - PullRequest
       0

Ajax если больше одного @mention

0 голосов
/ 23 декабря 2018

Я пытаюсь создать систему упоминаний в стиле 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;
        }

1 Ответ

0 голосов
/ 24 декабря 2018

Похоже, вы отправляете массив, который является результатом match вас в AJAX-запросе.

Хотя я не могу проверить это, но вы можете использовать предпросмотр в вашем регулярном выражении и использовать 1-й элемент из полученного массива,Отрицательный взгляд (?!.*@\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);
   });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...