Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Повторить поиск... (https://javascript.ru/forum/misc/16903-povtorit-poisk.html)

ale19 28.04.2011 19:07

Есть архив материалов на сайте.В виде материалов всеназвания имеют вид
<a href="ссылка на страницу материала" class="newslink">Название материала</a>

На странице материала его название имеет вид
<div id="ldF999" >Название материала</div>

и припомощи скрипта в первом посте вывожу похожие материалы

Допустим название такое
<div id="ldF999" >Это название этого материала</div>
этим получаю массив из слов названия
bquery = $("#ldF999").text().match(/([а-яёa-z]){4,}/gi);
отбросив ненужное,т.е. цифры,знаки препинания и слова менее чем из четырех букв
Присваиваю
query = bquery[0] и ищу похожие слова в архиве с помощью поиска
$.post('/load/', {query: query, a: 2},
...
Но так ищет только по первому слову из массива bquery
Когда query меняю в срипте на другое значение ,к примеру bquery[2] ищет нормально,но вот не получается сделать так чтоб при отсутствии схожих материалов по названию в архиве,атоматически при norez==undefined присвоить query значение следующего слова из массива и повторить поиск схожих материалов

Результаты поиска выводятся в
<div style=" display: none;overflow: hidden;" id="ressearch"></div>

melky 28.04.2011 20:44

надо было расписать так ( я про первые строчки,до $.post )

тогда и понять было бы легче


и почему-то у меня неуверенность насчет переменной func и самой рекурсии

// это массив [ название, этого, материала ]
var bquery = "Это название этого материала".match(/([а-яёa-z]){4,}/gi)


// номер слова в массиве
var n = 0;



// ищем "название"

$.post('/load/', {query: bquery[n], a: 2}, function(data){

                
       // ссылка на обработчик результата. т.е. на эту анонимную функцию
       var func = arguments.callee;
      
       if( !norez ){

      /*  что приходит при верном или неверном слове из архива?
           у меня будет слово Error */

                 if( data == 'Error' ) {
  
                              // проверка на наличие такого индекса в массиве
                              if( n < bquery.length ){
 
                         /*  через половину секунды отсылаем POST-запрос серверу со следующим словом
                                                      ++n <- это 1. тоесть слово ---> "этого"
                         важно отметить,что обработчик будет ТАКОЙ ЖЕ, т.е. опять вызовет POST-запрос, но уже с увеличенным "n" ( 3 , слово -> "материала")     */

                         setTimeout( function(){   $.post('/load/', {query: bquery[++n], a: 2}, func);  }, 500 );

                             // мы прошли все элементы массива, поиск неудачен
                              } else {   
                                          
                                      alert( 'НЕ НАЙДЕНО' );
   
                              }

                }

      }

});

ale19 28.04.2011 20:50

melky,
Получается - ничего не выйдет?

melky 28.04.2011 20:56

Ты попробовал ? по логике должно работать

ale19 28.04.2011 21:00

пробовал работает отлично,только с одним из любых заданных query=bquery[]

melky 28.04.2011 21:23

Строчку проверки, верный или неверный результат пришел, изменил?

Data=="errOr"


нет, верно?

ale19 28.04.2011 21:38

заменить norez==undefined на Data=="errOr" ?

так не получается

melky 28.04.2011 22:32

facepalm

как происходит проверка, нашли ли мы или нет?

Цитата:

query = bquery[0] и ищу похожие слова в архиве с помощью поиска
$.post('/load/', {query: query, a: 2},
т.е. ответ из "архива"

ale19 28.04.2011 22:49

ну как...сдесь же
if (norez==undefined)...

melky 28.04.2011 23:07

что отвечает архив? по нем надо сверяться, верен ли результут?


Часовой пояс GMT +3, время: 12:13.