parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Как работает JSHTTPReguest ?

Kex 02.03.2006 00:24

Хочется понять, как работает система, предложенная на http://www.ipo-design.ru/developments/httpreguest/ ..

Система состоит из 5 файлов - index.prs, load_test.prs, auto.p, JSTestParser.js и JSHttpReguest.js . Как я понял, в auto.p содержатся функции для совместимости Parser и JS, в JSHtpReguest.js - основной класс, в index.prs находится форма, значения с которой обрабатываются в JSTestParser.js, затем в load_test.prs, потом посылаются обратно в JSTestParser.js, и оттуда пишутся в index.prs.

Вот JSTestParser.js с моими комментариями:
  function doLoadParser(force) {
//query = значение поля "query1" формы
    var query = '' + document.getElementById('query1').value;
    var req = new JSHttpRequest();
    req.onreadystatechange = function() {
//не понимаю, что значит readyState == 4
      if (req.readyState == 4) { 
//здесь выводятся значения, полученные уже из load_test.prs, написанноо на парсере.
        document.getElementById('result1').innerHTML = 
          'MD5("'+req.responseJS.food +'") =  ' +
          '"' + req.responseJS.good + '"'+id+' '+pid;
      }
    }
    req.caching = true;
//открывается файл с обработчиком...
    req.open('GET', 'load_test.prs', true);
//обработчику посылается хэш, да?
    req.send({ q: query });
  }
  var timeoutR = null;
//эта функция вызывается на onKeyUp поля формы, только я не понимаю, зачем нужен таймер??
 function doLoadUpParser() {
    if (timeoutR) clearTimeout(timeoutR);
    timeoutR = setTimeout(doLoadParser, 100);
  }
А сейчас я покажу то, что для меня пока что непостежимо:
#как понимаю, здесь просматриваются поля "формы", т.е. все параметры страницы. Но до меня не доходит, откуда в $forma оказывается строка вида id::q , где id - какой то номер (тоже кстати не понял какой). В qwery оказывается строка, которую мы ввели в поле формы. Я думаю, что это значение последнего поля просматриваемой "формы", но, повторюсь, откуда же в $forma такая странная строка??
^form:fields.foreach[field;value]{
	$forma[$field]
      $qwerty[^untaint{$value}]
}


#здесь странная строка $forma разбивается на части
#$uid - какой-то идентификатор, нужный для корректной работы кода
#а вот $suid и $q я не понимаю зачем тут нужны !! Но если их убрать, ничё не работает
^forma.match[(.*):(.*):(.*)][g]{
   $uid[$match.1]
   $suid[$match.2]
   $q[$match.3]
}


#хэш-результат
$test[
   $.food[$qwery]
   $.good[^math:md5[$qwery]]
]

#отправка полученного хэша в jstestparser.js в виде
#  странный идентификатор
#  отладочная информация
#  сам хэш, предварительно обработанный в коде из auto.p
 JSHttpRequest.dataReady(
  $uid,
  'DEBUG INFO',
  ^object2js[$test]
)
Наверно, это звучало немного глупо, но мне действительно не понятно как работает эта штука!! Я хотел вставить пару параметров, а не получается.
За помощь буду очень благодарен!!!