Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перебирать массив и ключи хэша 
V
    Опции темы
gcc
Дата 19.4.2010, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17




я хотел перебирая массив, посмотреть если ли такое значение массив в ключе хэша... (значение хеша равняется 1)
т.е. {'34' => 1, '35' =>1}

Код

  for (var i = 0, len = tr.length > 20 ? 20 : tr.length; i < len; i++) {
     
   if ( $(".send:eq("+i+")").html() == msg.array_send_upd.(i) ) {
      $(".send:eq("+i+")").html('1');    
      $(".send_me:eq("+i+")").html('1111');     
    }
    
  }



msg.array_send_upd. - это хэш 

а как мне посмотреть есть ли у него ключ $(".send:eq("+i+")").html() (соответственно и значение) 

т.е. я запутался, как тут написать  if ( $(".send:eq("+i+")").html() == msg.array_send_upd.(i) ) {  чтобы это сравнить ??


PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 19.4.2010, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17




я сделал отладку в скрипте и отправил как строку, т.е. там 95% вероятности что идет именно хэш

$VAR1 = { '317' => 1 }; 
(это то, что пришло в js, т.е. хєш)

т.е. 1) я перебираю таблицу for (var i = 0; i < len; i++) { 
2) ищу id по очереди (id в MySQL таблицу на самом деле)
3) я хочу сравнить это id есть ли оно в хэше (в ключе хэша...)

как нибудь, пытался по разному
 msg.array_send_upd[$(".id:eq("+i+")").html()] == 1

4) если совпадает ключ с id, то отмечаем что отчет пришел 
 $(".send:eq("+i+")").html('1');
и     $(".send_me:eq("+i+")").html('блп-бла-пришел');     


может я структуру не так сделал, как это можно сделать?

т.е. проблема именно тут:  msg.array_send_upd[$(".id:eq("+i+")").html()] == 1

ЗЫ я хотел сделать отчет в чате, чтобы было видно когда пользователь принял сообщение, а когда нет, вместо личных сообщений...
PM WWW ICQ Skype GTalk Jabber   Вверх
ksnk
Дата 19.4.2010, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



gcc, прикольно...
сначала в чат сам напихиваешь какой-то текст нумерованый, потом проверяешь есть ли он?  smile 

навскидку, насколько я понял задачу,  можно предложить пару вариантов:
-- для каждого сообщения, номер которого может быть важно проверить, ставишь ID равный 'messsend_XXX', где XXX - тот самый критерий поиска (число?)
простая проверка на document.getElementById даст сразу простой и понятный ответ на нужный вопрос

-- сразу хранишь весь массив принятых посланных номеров сообщений в Javascript'овских объектах. На старте предаешь вместе с сформированным уже текстом (если он, конечно, формируется сервером) и список сообщений. А все динамически добавляемые-удаляемые индексы сообщений уже сам можешь догадаться куда пихать  smile 
Итого - просто проверить есть ли такой индекс в массиве (поле в объекте) и дело в шляпе...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
gcc
Дата 19.4.2010, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



ksnk, я примено так и делаю...

мое действие в этом топике финальное...

все и с начало:

я отправил сообщение, и потом я должен получить отчет что оно дошло...

1) я пишу сообщение в форму, отправляю его на сервер и вставляю себе, отмечаю его как не принятое пользователем с которым я общаюсь...
2) отправляется запрос через 2-3 сек. который смотретит новые сообщение
2, а) этот запрос когда отправляется берет с таблицы document.getElementById  0-15 значений которые помечен как не принятые моим собеседником..
2, б) в скрипте не сервер я смотрю новые сообщение и смотрю те сообщениея мои которые пользователь принял
2, в) я отправляю эти данные обратно отбратно, вставляю новые сообщение которые есть И отмечаю те сообщения которые были приняты в msg.array_send_upd[$(".id:eq("+i+")").html()] == 1 с теми ид которые в таблице...

все работает!
НО я не знал что будет такой геморой с сравнением ключа хэша msg.array_send_upd[$(".id:eq("+i+")").html()] == 1 

ну у меня храниться по идее как вы сказали в массиве, тоже, просто я бегу его с таблицы document.getElementById и перебираю for как массив

вопрос остается в любом случае? как сравнить эти 2 структуры, массивы и хэши?

это не реализуемо...?

Добавлено через 4 минуты и 10 секунд
gcc, я еще раз прочитал ваше сообщение, не много понял...

ну допустим я поставлю в msg.array_send_upd ключ  'messsend_XXX'

как тут тогда записать? так?

Код

if ( msg.array_send_upd.messsend_$(".id:eq("+i+")").html() &&   msg.array_send_upd.messsend_$(".id:eq("+i+")").html() == 1  ) 
{

}

PM WWW ICQ Skype GTalk Jabber   Вверх
ksnk
Дата 19.4.2010, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



gcc,  У меня сложилось впечатление что общение идет между двумя клиентскими машинами со своими броузерами. а сервер используется просто как транспорт? 
Как-то слишком сложно, не логичнее ли сервер заставить и хранить сообщения и следить за корректно принятыми?
сторона А отправляет сообщение. На сервере оно помечается как непрочтенное. 
Сторона В запрашивает список сообщений и при отправке списка все отправленные помечаются как прочтенные.
при следующем обновлении списка на стороне А все непрочтенные сообщения сбрасываю свой статус в прочтенные...

Правильно ли я понял, что сейчас для того, чтобы пометить какое-то сообщение как прочтенное, заводится отдельная структура в ДОМ'е (невидимая?) и в неё запихиваются странные html'ины? Потом по этим странным html'инам производится пробежка посредством jquery-селекторов?

Можно ведь просто завести массив и хранить индексы сообщений в нем. Если индексы сообщений не очень-то числовые - можно завести объект и отмечать в нем поля. Прверять поля на сущенствование 
typeof(send[XXX])!=undefined, удалять поля - методом delete...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
gcc
Дата 19.4.2010, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



ну смотрите я отправил, например, 2-5 сообщения пользователю, а у него связь разорвалось на 5 мин...

у меня это видно, у меня если сообщение стоят как не принятые...

как толкьо он появляется, он принимает из скрипта на сервер от меня и они нумеруюуться в MySQL как принятые, мой массив отправляется на сервер и смотрит принятые те сообщение, если принятые, возвращает мне... ну я делаю в скрипте, то что  спрашиваю... : msg.array_send_upd[$(".id:eq("+i+")").html()] == 1

как тогда сравнить 2 массива,

1 - одном будут id которые принялись
2 - второй массив это то, что стоит у меня в таблице, и если ИД не принялось то поменять, т.е. в любом случае нужно сравнить 2 массива (ну или хэша)??

Добавлено @ 23:58
Цитата(ksnk @ 19.4.2010,  23:33)
Правильно ли я понял, что сейчас для того, чтобы пометить какое-то сообщение как прочтенное, заводится отдельная структура в ДОМ'е (невидимая?) и в неё запихиваются странные html'ины? Потом по этим странным html'инам производится пробежка посредством jquery-селекторов?

да

Добавлено @ 00:00
Цитата(ksnk @ 19.4.2010,  23:33)
Можно ведь просто завести массив и хранить индексы сообщений в нем. Если индексы сообщений не очень-то числовые - можно завести объект и отмечать в нем поля. Прверять поля на сущенствование 
typeof(send[XXX])!=undefined, удалять поля - методом delete...

сори, не понимаю, ну а как тут сделать?

у меня массив из таблицы, ну а какая тут разница?

я получаю id с таблицы...  $(".id:eq("+i+")").html()

ну если у меня будет так big_array[id] что это даст??


Это сообщение отредактировал(а) gcc - 20.4.2010, 00:03
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 20.4.2010, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



ksnk, оно все таки работает так:
Код


if ( msg.array_send_upd[$(".id:eq("+i+")").html()] )
{


msg.array_send_upd - это хэш

видимо я где-то что-то запутал!

если интересно, то вот полнолстью:


Код



    <script type="text/javascript" src="/dev/jquery-1.3.2.js"></script> 

<script type="text/javascript" src="/latest/jquery.json-2.2.js"></script>


<script type="text/javascript" src="/dev/jquery-b64.js"></script>








<script type="text/javascript" src="/latest/markitup/jquery.markitup.js"></script>





<link rel="stylesheet" type="text/css" href="/latest/markitup/skins/markitup/style.css" />



<script type="text/javascript" src="/bbcode/set.js"></script>
<link rel="stylesheet" type="text/css" href="/bbcode/style.css" />



<script type="text/javascript" >
   $(document).ready(function() {
      $("#text_cm").markItUp(mySettings);
   });
</script>
 
 


<script type="text/javascript" >
   $(document).ready(function() {
      $("#text_cm2").markItUp(mySettings);
   });
</script>
 
 




<!-- Сам код нашего чата -->
<script type="text/javascript">
 
$(document).ready(function () {
 //   $("#pac_form").submit(Send); // вешаем на форму с именем и сообщением событие которое срабатывает кодга нажата кнопка "Отправить" или "Enter"
 //   $("#pac_text").focus(); // по поле ввода сообщения ставим фокус
    setInterval("Load();", 2000); // создаём таймер который будет вызывать загрузку сообщений каждые 2 секунды (2000 миллисекунд)
});   
 

 
var last_message_id = 0; // номер последнего сообщения, что получил пользователь
var load_in_process = false; // можем ли мы выполнять сейчас загрузку сообщений. Сначала стоит false, что значит - да, можем
 
// Функция для загрузки сообщений
function Load() {
    // Проверяем можем ли мы загружать сообщения. Это сделано для того, чтобы мы не начали загрузку заново, если старая загрузка ещё не закончилась.
    if(!load_in_process)
    {
            load_in_process = true; // загрузка началась
            // отсылаем запрос серверу, который вернёт нам javascript


array = [];
 var tr = document.getElementById('t_chat').getElementsByTagName('tr');
 var ll = tr.length -1;


  for (var i = 0, len = tr.length > 10 ? 10 : tr.length; i < len; i++) {
     
     if ( $(".send:eq("+i+")").html() == '0' ) {


    
    array.push( $(".id:eq("+i+")").html() );


    }
    
  }
  
  
  


        var formData = {
             "id_last":$("#last_id").html()
           , "array_new":array
                                                          
        };

        
        $.ajax({
      type: "POST",

      url: "/chat/load/1",
      data:'jsonData=' + $.toJSON(formData),
      dataType: "json",      
      success: function(msg) {

                if (msg.success_ok > 0) {
                
                    if (msg.array_add) {
                        
                       for (var i = 0, len = msg.array_add.length; i < len; i++) {
                        
                      $("#t_chat").prepend( " <tr><td class='user_name'>"+ $("#user_fr").html() +"</td><td class='time'><span id='tt-"+ msg.array_add[i].id +"'>"+  msg.array_add[i].created  +"</span></td><td class='text_chat'>"+ msg.array_add[i].text  +"</td><td class='send_me'>(Принято вами!)</td><td class='id'>"+ msg.array_add[i].id +"</td><td class='send'>1</td></tr>  " );                                 
                       times("tt-" + msg.array_add[i].id );                           

                $("#last_id").html( msg.array_add[i].id );                 
                        
                       }
                        
                            $(".id").hide();           
                          $(".send").hide();    

                        
                    }
                    
                    if (msg.array_send_upd) {
        
        
                        
  for (var i = 0, len = tr.length > 20 ? 20 : tr.length; i < len; i++) {
     

if ( msg.array_send_upd[$(".id:eq("+i+")").html()] && $(".send:eq("+i+")").html() == 0 )
{

     
     
     $(".send:eq("+i+")").html('1');
   
     $(".send_me:eq("+i+")").html('111' );     
   
 

 }
    
  }


                        
                    }                
                
                
                } else {
                
                }
        
                
     }

   });

      load_in_process = false; // говорим что загрузка закончилась, можем теперь начать новую загрузку   
   

    }
}
</script>










   <script type="text/javascript">

        function checkLength(o,n,min,max) {

            if ( o.val().length > max || o.val().length < min ) {
                return false;
            } else {
                return true;
            }

        }


$(function() {
  $('.error').hide();
  $('input.text-input').css({backgroundColor:"#FFFFFF"});
  $('input.text-input').focus(function(){
    $(this).css({backgroundColor:"#FFDDAA"});
  });
  $('input.text-input').blur(function(){
    $(this).css({backgroundColor:"#FFFFFF"});
  });

  $(".button").click(function() {
        // validate and process form
        // first hide any error messages
    $('.error').hide();

    

        if ( $('input#text').val().length > 1000 || $('input#text').val().length < 1 ) {
        

      $("label#text_error").show();

      $("input#text").focus();

      return false;

    }





        var formData = {
             "text":$("input#text").val()                                                     
        };

        
        $.ajax({
      type: "POST",
      url: "/chat/add/1",
      data:'jsonData=' + encodeURIComponent( $.toJSON(formData) ),
      processData: false,         
      dataType: "json", 
      timeout: 3000, 
      success: function(msg) {

    if (msg.success_ok > 0) {

  $('#chat_error').html(" ");


              $("#t_chat").prepend( " <tr><td class='user_name'>"+ $("#username").html() +"</td><td class='time'><span id='tt-"+ msg.id +"'>"+  msg.created  +"</span></td><td class='text_chat'>"+ msg.text  +"</td><td class='send_me'>(Отпр., ожидается приема пользователем...)</td><td class='id'>"+ msg.id +"</td><td class='send'>0</td></tr>  " );         


  times("tt-" + msg.id );
  
    //    myFunc('t_chat');

    $(".send").hide();           
    $(".id").hide();    

 $('#text').val('');
 $("#text").focus(); // по поле ввода сообщения ставим фокус
 

   } else {
     

   //   $('#success_comment').html(" ");      
      $('#chat_error').html(" ");
             
       for (var i = 0, len = msg.error_chat.length; i < len; i++) {


    if ( msg.error_chat[i] == 'no_text') {       
         $('#chat_error').html($('#chat_error').html()+ " <div> <b> Добавление комментариев выключено1! </b> </div> ");
      }

    if ( msg.error_chat[i] == 'no_length_text') {       
         $('#chat_error').html($('#chat_error').html()+ " <div> <b> Добавление комментариев выключено2! </b> </div> ");
      }

    if ( msg.error_chat[i] == 'no_fr_un') {       
         $('#chat_error').html($('#chat_error').html()+ " <div> <b> Добавление комментариев выключено3! </b> </div> ");
      }

    if ( msg.error_chat[i] == 'no_max_me') {       
         $('#chat_error').html($('#chat_error').html()+ " <div> <b> Добавление комментариев выключено4! </b> </div> ");
      }



        

        }
    
      

 // $('#error_comment').html($('#error_comment').html()+ ' <br> <br> <br> ');


         $('#chat_error').css('font-weight', 'bold');    
         $('#chat_error').css('color', 'red');    

         $('#chat_error').css('text-indent', '3em');    
         $('#chat_error').css('text-align', 'left');            




        }
        

        
      }
      

             
     });


     
    return false;
    });
});







  </script>    

PM WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1951 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.