Author |
Message |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 413 поощрить/наказать
|
Posted: Tue Oct 24, 2006 7:57 pm (написано за 2 минуты 17 секунд)
Post subject: JsHttpRequest: динамическая подкачка данных с поддержкой upload-а (AJAX)
|
|
Статья: dklab.ru/lib/JsHttpRequest/
Данный топик - продолжение (начало тут: forum.dklab.ru/comments/lib/41_jshttprequestDinamicheskayaPodkachkaDannihBezPerezagruzkiStranitsi.html). Он касается только версии 4.0. Поддержка старой версии 3.0 (и более старых) производится в ограниченном объеме. Пожалуйста, если Вы нашли баг, постарайтесь вначале обновить библиотеку до версии 4.0.
Last edited by Дмитрий Котеров on Tue Oct 24, 2006 8:00 pm; edited 1 time in total
|
|
Back to top |
|
 |
Maxim Kalenkov
Заглянувший
Joined: 27 May 2004
Posts: 9
Карма: 0 поощрить/наказать
Location: Москва
|
Posted: Tue Oct 24, 2006 7:59 pm (спустя 2 минуты; написано за 2 минуты 48 секунд)
Post subject: Re: JsHttpRequest: динамическая подкачка данных с поддержкой upload-а (AJAX)
|
|
Повторю свой вопрос, он как раз новой версии касается. Дмитрий Котеров wrote: |
Да, в новой версии все ошибки бросаются в виде исключений. Так универсальнее получаются (ошибок уж очень много). Если хотите обрабатывать их вручную, оберните вызов библиотеки в try { ... } catch (e) { alert(e) }. | А не лучше ли будет вместо кидания исключения вызывать функцию, указанную в req.onreadystatechange, установив readyState, скажем, в 0, а в responseText записать сообщение об ошибке? Тогда все ошибки при использовании библиотеки можно будет обрабатывать единообразно.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 413 поощрить/наказать
|
Posted: Tue Oct 24, 2006 8:01 pm (спустя 2 минуты; написано за 38 секунд)
Post subject:
|
|
Так и было в бета-версии 4.0. Но потом я все же решил отказаться от такого поведения, т.к. с ним очень просто пропустить ошибку, не поняв, в чем же было дело. Какие недостатки от бросания исключений?
|
|
Back to top |
|
 |
Maxim Kalenkov
Заглянувший
Joined: 27 May 2004
Posts: 9
Карма: 0 поощрить/наказать
Location: Москва
|
Posted: Tue Oct 24, 2006 8:09 pm (спустя 7 минут; написано за 5 минут 35 секунд)
Post subject:
|
|
Дмитрий Котеров wrote: |
Так и было в бета-версии 4.0. Но потом я все же решил отказаться от такого поведения, т.к. с ним очень просто пропустить ошибку, не поняв, в чем же было дело. Какие недостатки от бросания исключений? | Просто все исключения надо ловить, а то пользователь тебя не поймёт. Потому придётся делать обёртку вокруг JsHttpRequest. Лишний код, которого можно было бы избежать. PS. Хотя я всё равно собирался сделать обёртку и разбить req.onreadystatechange на несколько частей, по одной на каждый readyState - мне кажется, так использовать удобнее.
|
|
Back to top |
|
 |
Юрий Насретдинов
Модератор

Joined: 13 Mar 2003
Posts: 8642
Карма: 198 поощрить/наказать
Location: 007 495
|
Posted: Tue Oct 24, 2006 8:39 pm (спустя 29 минут; написано за 1 секунду)
Post subject:
|
|
Если бросать исключение, то Вы ошибку точно не пропустите. А если вызывать onreadystatechange, то есть очень большая вероятность ошибку пропустить.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 413 поощрить/наказать
|
Posted: Tue Oct 24, 2006 9:22 pm (спустя 43 минуты; написано за 2 минуты 19 секунд)
Post subject:
|
|
Maxim Kalenkov wrote: |
Просто все исключения надо ловить, а то пользователь тебя не поймёт. | Вообще-то, если библиотека используется правильно, исключений быть не должно. Ну разве что случай, когда от сервера пришли невалидные данные, но это также свидетельствует об ошибке в скриптах на сервере. Правда, есть другая проблема: IE почему-то не печатает текст исключения, а пишет "Exception thrown and not caught". Я не думал, что это стандартное поведение... Кстати, в статье ничего вообще не говорится про обработку ошибок. Так что в будущих версиях можно будет при необходимости поменять поведение библиотеки. Меня беспокоит то, как действует IE... почему же он не показывает текст... и можно ли его заставить его показывать.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 413 поощрить/наказать
|
Posted: Tue Oct 24, 2006 9:44 pm (спустя 22 минуты; написано за 1 минуту 17 секунд)
Post subject:
|
|
Все, эту проблему удалось решить полностью: throw (window.Error? new Error(msg) : msg); Теперь и в IE ошибки выглядят хорошо. И в FireFox, и даже в Сафари. Обновил библиотеку на сайте. TODO: вынести все тексты ошибок в константы библиотеки и сделать что-то типа sprintf из _error() для более удобного вида.
|
|
Back to top |
|
 |
reactorx
Участник форума

Joined: 28 Feb 2006
Posts: 111
Карма: 1 поощрить/наказать
Location: RND
|
Posted: Wed Nov 01, 2006 11:09 pm (спустя 8 дней 1 час 25 минут; написано за 4 минуты 47 секунд)
Post subject:
|
|
угу Вы правы. прошу прощения что написал в эту ветку. но думаю тема будет интересна не только мне. Вобщем ситуация такова. Как использовать вашу либу если при разработке сайта используется ЧПУ. Суть в том. что либа передает данные (я про GET запрос) в таком виде any.php?xxx=123&zzz=123&any=any (параметры могут быть любые) а каким образом либу можно адаптировать под ЧПУ (если это реализовано в либе плз ткните пальце. в доках не нашел) Были мысли запихнуть в req.open(null, '->СЮДА<-', true); урл вида /xxx/123/zzz/123 Что вы можете сказать по этому поводу?
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 413 поощрить/наказать
|
Posted: Thu Nov 02, 2006 12:52 am (спустя 1 час 43 минуты; написано за 45 секунд)
Post subject:
|
|
Никаким образом не нужно ее адаптировать. Зачем? ЧПУ придуманы, чтобы видеть в браузере красивые URL-ы, а URL-ы, генерируемые библиотекой, от глаз пользователя заведомо скрыты.
|
|
Back to top |
|
 |
Путник
Участник форума
Joined: 19 Mar 2006
Posts: 40
Карма: 1 поощрить/наказать
|
Posted: Wed Nov 08, 2006 10:27 pm (спустя 6 дней 21 час 34 минуты; написано за 5 минут 58 секунд)
Post subject:
|
|
Здравствуйте, Дмитрий. В настоящий момент я делаю сайт, используя фреймворк Code Igniter (www.codeigniter.com/), в котором, по соображениям безопасности не используется метод GET и на все URL вида index.php?foo=bar выводится ошибка 404 - страница не найдена. Поэтому для передачи запроса в JsHttpRequest я принудительно установил метод POST:Но, не смотря на это, скрипт посылает запросы вида /myclass/ajax/?11624095519820-xml, что приводит к тому, что вместо результата я получаю сообщение об ошибке. Не могли бы вы подсказать, что я делаю не правильно?
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 413 поощрить/наказать
|
Posted: Thu Nov 09, 2006 2:25 am (спустя 3 часа 58 минут; написано за 2 минуты 45 секунд)
Post subject:
|
|
Вы все делаете правильно. Просто JsHttpRequest в любом случае изменяет URL, добавляя в него ?... (кстати, у Вас, наверное, старая версия: в новой добавка выглядит как ?JsHttpRequest=11624095519820-xml). Он просто не умеет работать без него. В принципе, можно сделать, чтобы эта строка добавлялась через POST, если выбран этот метод, но данная функциональность не так-то проста в добавлении. Я вот только не пойму: что же это за framework такой, который не поддерживает GET-параметры... в как же различные формы поиска, например? Их POST-ом делать неконцептуально.
|
|
Back to top |
|
 |
Путник
Участник форума
Joined: 19 Mar 2006
Posts: 40
Карма: 1 поощрить/наказать
|
Posted: Thu Nov 09, 2006 10:39 am (спустя 8 часов 14 минут; написано за 3 минуты 10 секунд)
Post subject:
|
|
Фремворк Code Igniter - www.codeigniter.com/ - в целом вещь очень приятная, обладающая небольшим размером, неплохой функциональностью, а, самое главное, отличной документацией. Но вот только с GET не очень дружит ... Странно, но, например, xajax c ним работает норамально, правда у xajax проблема с кириллицей .
|
|
Back to top |
|
 |
Алекс
Guest
Карма: 388 поощрить/наказать
|
Posted: Sun Nov 19, 2006 10:42 pm (спустя 10 дней 12 часов 2 минуты; написано за 14 минут 34 секунды)
Post subject:
|
|
Должен отметить, что библиотека действительно получилась отличной. Но, как мне кажется, не хватает той гибкости, которая есть в классе XAJAX (xajaxproject.org), а именно возможности изменения заданного элемента с ID прямо из PHP. В текущем варианте функция яваскрипта изменяет содержание блока с ID='result' и ID='debug'. Если нужно изменить свойста элемента с другим именем, то приходится вручную модифицировать функцию яваскрипта. Так почему бы не использовать имена переменных из $_RESULT как ID элементов для обновления? Например, при получении такого массива какЯваскрипт запишет в элемент с ID='q' значение QUERY_STRING, а в элемент с ID='md5' значение MD5_CODE. А привязку делать не к файлу РНР, а к функциям. Например, вызов doLoad('myphpfunc', this.form) запустит через call_user_func функцию с именем myphpfunc и передаст параметром значение формы. А можно пойти ещё дальше, и добавить в PHP возможность указать изменяемое свойство элементов кроме innerHTML, например, Disabled или Visible. В XAJAX для этого используется метод assign, например так.Наверное, возникнет вопрос - а почему бы тогда не использовать XAJAX? (-; Всё у них хорошо, но нет возможности загружать файлы.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 413 поощрить/наказать
|
Posted: Mon Nov 20, 2006 12:13 pm (спустя 13 часов 31 минуту; написано за 2 минуты 6 секунд)
Post subject:
|
|
Алекс wrote: |
не хватает той гибкости, которая есть в классе XAJAX (xajaxproject.org), а именно возможности изменения заданного элемента с ID прямо из PHP | А также не хватает возможности послать открытку по почте и отформатировать винчестер. JsHttpRequest - инструмент разработчика, а не помойка. Если нужно сделать что-то на ее базе (например, изменять элемент по его id), напишите функцию из 3 строчек, которая это делает, и используйте везде.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 413 поощрить/наказать
|
Posted: Mon Nov 20, 2006 12:22 pm (спустя 9 минут; написано за 1 минуту 45 секунд)
Post subject:
|
|
По поводу XAJAX - вопросы. Как у них с: - отладочными возпожностями при возникновении ошибки (в том числе фатальной) PHP? - работой с отключенными ActiveX? - простотой использования библиотеки? - передачей структурированных данных (вроде многомерных массивов)? - кодировками (в том числе русскоязычными)?
|
|
Back to top |
|
 |
Алекс
Guest
Карма: 388 поощрить/наказать
|
Posted: Mon Nov 20, 2006 3:54 pm (спустя 3 часа 31 минуту; написано за 2 минуты 15 секунд)
Post subject:
|
|
Quote: |
А также не хватает возможности послать открытку по почте и отформатировать винчестер. | Это можно сделать в дополнительных плагинах. :) - отладочными возпожностями при возникновении ошибки (в том числе фатальной) PHP? Выводится алерт с полученным текстом. - работой с отключенными ActiveX? - простотой использования библиотеки? - передачей структурированных данных (вроде многомерных массивов)? wiki.xajaxproject.org/Tutorials:Learn_xajax_in_10_Minutes
- кодировками (в том числе русскоязычными)? wiki.xajaxproject.org/Tutorials:Character_Encoding_and_xajax
|
|
Back to top |
|
 |
bubblegum
Guest
Карма: 388 поощрить/наказать
|
Posted: Fri Nov 24, 2006 10:40 am (спустя 3 дня 18 часов 45 минут; написано за 4 минуты 56 секунд)
Post subject: как получить readyState<4
|
|
Приветствую! Вы написали отличную библиотеку, использую для быстрого выбора из справочника в 120К записей. Интересует один вопрос: когда начал изучать ajax, пробовал стандартный xmlhttprequest, и в обработчике ответа была строка document.getElementById('progress').style.width=req.readyState*10 - то есть индикатор подгрузки - красивенько так ползла полоска; а дальше как обычно if(req.readyState==4){... В респонс скрипте естественно данные вываливались echo При использовании jsHttpRequest ответ формируется в виде строки и потом отдается в $_RESULT по окончании работы скрипта, и выходит что клиент не получает readyState=1..3 и не работает мой прогресс индикатор. Подскажите пжл кто знает как можно обойти такую проблему.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 413 поощрить/наказать
|
Posted: Fri Nov 24, 2006 10:55 am (спустя 15 минут; написано за 2 минуты 23 секунды)
Post subject:
|
|
на самом деле, он их получает в том же порядке, что и стандартны xmlhttprequest, но - практически один за другим, без задержки, когда данные уже готовы. Кстати говоря, то ли в IE, то ли в FF, то ли в Опере xmlhttprequest ведет себя точно так же (вопреки здравому смыслу), так что указанный Вами способ отрисовки прогресса не является надежным в любом случае.
|
|
Back to top |
|
 |
wacky
Заглянувший
Joined: 26 Nov 2006
Posts: 5
Карма: 0 поощрить/наказать
|
Posted: Sun Nov 26, 2006 11:48 am (спустя 2 дня 52 минуты; написано за 6 минут 50 секунд)
Post subject:
|
|
Здравствуйте! Я что-то пропустил, или обработчик timeout до сих пор не реализован ? Я для себя его написал еще в 3-й версии библитеки. Если интересно, то во вложении последняя версия библиотеки Дмитрия с внесенными изменениями. Таже в .php добавлена переменная RAW_REQUEST, "сырой запрос" от js. Полезно для вычисления контрольной суммы пришедших данных, например. Использование: req = new JsHttpRequest(); req.timeout = 5000; // ms req.onreadystatechange = function() { if (this._req.readyState == 4) { req._resetTimeout(); // сбрасываем таймайут // какой-то код } } req.ontimeout = function() { alert('Timed out'); };
Description: |
|
 Download |
Filename: |
JsHttpRequest.rar |
Filesize: |
9.71 KB |
Downloaded: |
1282 Time(s) |
|
|
Back to top |
|
 |
Faster
Заглянувший
Joined: 26 Nov 2006
Posts: 2
Карма: 0 поощрить/наказать
|
Posted: Sun Nov 26, 2006 12:44 pm (спустя 56 минут; написано за 2 минуты 44 секунды)
Post subject: Блин ... а есть ли дока полная , ну как HELP
|
|
Народ есть ряд вопросов , заюзал эту штуку ... ОЙ КАК ПОНРАВИЛОСЬ !!! Руль когда люди работают и пишут такие весчи... Что надо так это описание всех методов и свойств созданного объекта Как в PHP так и в JS так как чтение описания недало ответы на многие вопросы а самому додумываться ... и ответ на один не лёгкий вопрос как передать массив ... У меня получилось сделать это в направление от клиента к серверу ... а вот попытка передать обратноприводит к передаче строки разделённой запятой .... как с этим справиться ? Ну очень надо швырять массивы ...
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 413 поощрить/наказать
|
Posted: Sun Nov 26, 2006 3:28 pm (спустя 2 часа 43 минуты; написано за 1 минуту 54 секунды)
Post subject:
|
|
wacky: понятно, я подумаю насчет добавления этой функциональности в библиотеку. Faster wrote: |
и ответ на один не лёгкий вопрос как передать массив ... | Очень просто: Code (php): | скопировать код в буфер обмена | $_RESULT = array (www.php.net/array)( 'a' => array (www.php.net/array)( 'b' => 10, 'c' => 20, ), 'd' => array (www.php.net/array)(1, 2, 4); ); |
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 413 поощрить/наказать
|
Posted: Mon Nov 27, 2006 11:10 am (спустя 19 часов 42 минуты)
Post subject:
|
|
|
|
Back to top |
|
 |
mot
Участник форума
Joined: 16 Mar 2006
Posts: 37
Карма: 3 поощрить/наказать
|
Posted: Mon Nov 27, 2006 10:32 pm (спустя 11 часов 21 минуту; написано за 57 секунд)
Post subject:
|
|
Вопрос - а почему при отправки формы через кнопку типа submit не передаётся имя/значение этой кнопки? Пример: Code (html): | скопировать код в буфер обмена | <form (december.com/html/4/element/form.html) id="frm" enctype="multipart/form-data" method="post" onsubmit="return doLoad();"> (december.com/html/4/element/.html) Text: <input (december.com/html/4/element/input.html) type="text" name="q"> (december.com/html/4/element/.html) <input (december.com/html/4/element/input.html) type="submit" name="but2" value="Submit!"> (december.com/html/4/element/.html) </form> |
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 413 поощрить/наказать
|
Posted: Tue Nov 28, 2006 12:30 am (спустя 1 час 57 минут; написано за 47 секунд)
Post subject:
|
|
Потому что форма не отправляется. Вы вызываете doLoad(), который делает совершенно отдельный запрос на сервер. Вместо submit-кнопки с тем же успехом мог стоять обычный <input type="button">.
|
|
Back to top |
|
 |
mot
Участник форума
Joined: 16 Mar 2006
Posts: 37
Карма: 3 поощрить/наказать
|
Posted: Tue Nov 28, 2006 1:34 am (спустя 1 час 4 минуты; написано за 2 минуты 54 секунды)
Post subject:
|
|
Да, я прекрасно понимаю что там мог стоять и <input type="button">. Собственно говоря он и стоит у Вас в примере. Но поведение элемента типа submit отличается от элемента типа button. Вопрос в трактовании фразы, написанной в Вашей статье. "Посылка целой формы на сервер". По моему мнению, для бекэнда должно быть безразлично, послана ли форма через стандартный POST, либо с помощью Вашей библиотеки. Минимально, для этого не хватает передачи элементов типа submit.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 413 поощрить/наказать
|
Posted: Tue Nov 28, 2006 11:28 pm (спустя 21 час 54 минуты; написано за 45 секунд)
Post subject:
|
|
Честно говоря, я не уверен, что можно вообще отследить, какая кнопка была нажата в момент вызова библиотеки. Скорее всего, нельзя никак. Так что рекомендую решать задачу другими способами.
|
|
Back to top |
|
 |
Infis
Guest
Карма: 388 поощрить/наказать
|
Posted: Mon Dec 04, 2006 2:28 pm (спустя 5 дней 14 часов 59 минут)
Post subject: У меня глюки?
|
|
Никто не сталкивался с такой ерундой? Код срипта: Code (php): | скопировать код в буфер обмена | <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <title>Список файлов</title> </head> <body> <?php ini_set (www.php.net/ini_set)('display_errors',1); error_reporting (www.php.net/error_reporting)(E_ALL); ?> <script type="text/javascript" language="JavaScript" src="../../../lib/JsHttpRequest/JsHttpRequest.js"></script> <script type="text/javascript" language="JavaScript">
var req; var newStart = 1; var newEnd = 5; var newSearch = ' '; var endSearch = 0; var endGet = 0; var newS = 1; var countElem = 0;
function doLoad(newSearch,newStart,newEnd) { //alert('Внутри doLoad'); // Код автоматически вызывается после окончания загрузки. req.onreadystatechange = process_get; // Prepare request object (automatically choose GET or POST). req.open(null, 'search_dc_loader.php', true); // Send whole form data to backend. req.send( { search: newSearch, start_limit: newStart, end_limit: newEnd } ); }
function process_get() { //alert(req.readyState + ' ' + endGet); if (req.readyState == 4) { // Вывод результатов на страницу ($_RESULT содержится в responseJS). if (req.responseJS.max_elem != "0") {
// Значит что-то нашли. Разбираем-с...
for (var_file in req.responseJS.files) { output += ' Файл: ' + req.responseJS.files[var_file].file + '<br/>' + ' ТТН: ' + req.responseJS.files[var_file].tth + '<br/>' + ' Размер: ' + req.responseJS.files[var_file].size + '<br/>'; } document.getElementById('result').innerHTML = output; // Вывод отладочной информации (выводится из responseText). document.getElementById('debug').innerHTML = req.responseText;
if( endGet == 0 ) { //alert(req.responseJS.next); if( req.responseJS.next == "1" ) { newStart = 1 * req.responseJS.start_limit + 1 * countElem; newEnd = countElem; newSearch = req.responseJS.search; req = new JsHttpRequest(); doLoad(newSearch, newStart, newEnd); } else { endGet = 1; } } } // Вывод отладочной информации (выводится из responseText). document.getElementById('debug').innerHTML = req.responseText; } }
function doSearch(searchStr,sLim,eLim) { if( newS == 1) { // Устанавливаем флаг окончания загрузки endGet = 0; // Сбрасываем результаты в окне output = ''; // Запоминаем число элементов для вывода countElem = eLim; //alert('Вызываем doLoad');
// Создаем новый объект JsHttpRequest. req = new JsHttpRequest();
// Запускаем поиск doLoad( searchStr, sLim, eLim); } }
</script>
<form id="frm" enctype="multipart/form-data"> Строка поиска: <input type="text" name="search"> <input type="button" value="Искать" onclick="doSearch(this.form.search.value,this.form.start_limit.value,this.form.end_limit.value)"><br/> Вывести результат в количестве <input type="text" name="end_limit"> элементов, начиная с <input type="text" name="start_limit">. </form>
<div id="result" style="border:1px solid #000; padding:2px"> </div> <div id="debug" style="border:1px dashed red; padding:2px"> </div> <?php //<hr><show_source(__FILE__)> ?> </body> </html> | Код бакенда на сервере: Code (php): | скопировать код в буфер обмена | <?php
ini_set (www.php.net/ini_set)('display_errors',1); error_reporting (www.php.net/error_reporting)(E_ALL);
// Load JsHttpRequest backend. require_once "../../../lib/JsHttpRequest/JsHttpRequest.php"; // Create main library object. You MUST specify page encoding! $JsHttpRequest =& new JsHttpRequest("windows-1251"); // Store resulting data in $_RESULT array (will appear in req.responseJs).
// $inputsearch = @$_REQUEST['search']; $start_lim = @$_REQUEST['start_limit']; $end_lim = @$_REQUEST['end_limit']; settype (www.php.net/settype)($start_lim,'integer'); settype (www.php.net/settype)($end_lim,'integer');
$end_lim = $start_lim + $end_lim - 1;
echo (www.php.net/echo) " : '". $inputsearch ."'<br/><br/>";
$search = iconv (www.php.net/iconv)( 'windows-1251' , 'utf-8' , strtolower (www.php.net/strtolower)($inputsearch) );
$transU = iconv (www.php.net/iconv)( 'windows-1251' , 'utf-8' , 'QWERTYUIOPASDFGHJKLZXCVBNM' ); $transL = iconv (www.php.net/iconv)( 'windows-1251' , 'utf-8' , 'qwertyuiopasdfghjklzxcvbnm' );
$dom = new DomDocument(); $dom->load("Kolyn.xml");
$xp = new domXPath($dom); $titles = $xp->query("//*[contains(translate(@Name,'$transU','$transL'), translate('$search','$transU','$transL'))]");
$nodes = array (www.php.net/array)(); foreach ($titles as $node) { $nodes[] = array (www.php.net/array)( // "max_elem" => $titles->length, "file" => iconv (www.php.net/iconv)('utf-8', 'windows-1251', $node->getAttribute('Name')), "tth" => $node->getAttribute('TTH'), "size" => $node->getAttribute('Size') ); }
$needNextQuery = 0; echo (www.php.net/echo) $end_lim. ' '; echo (www.php.net/echo) count (www.php.net/count)($nodes);
if ( $start_lim > count (www.php.net/count)($nodes) ) { $_RESULT = array (www.php.net/array)( "search" => $inputsearch, "max_elem" => $titles->length, "start_limit" => @$_REQUEST['start_limit'], "end_limit" => @$_REQUEST['end_limit'], "next" => $needNextQuery, "files" => array (www.php.net/array)() ); } else { if ( $end_lim > count (www.php.net/count)($nodes) ) { $end_elem = count (www.php.net/count)($nodes); } else { $needNextQuery = 1; if ($start_lim > $end_lim) $end_elem = $start_lim; } $_RESULT = array (www.php.net/array)( "search" => $inputsearch, "max_elem" => $titles->length, "start_limit" => $start_lim, "end_limit" => @$_REQUEST['end_limit'], "next" => $needNextQuery, "files" => array_slice (www.php.net/array_slice)($nodes, $start_lim - 1, $end_lim - $start_lim + 1) ); } // Below is unparsed stream data (will appear in req.responseText). ?> <pre> <b>Request method:</b> <?=$_SERVER['REQUEST_METHOD'] . "\n"?> <b>Loader used:</b> <?=$JsHttpRequest->LOADER . "\n"?> <b>_REQUEST:</b> <?=print_r (www.php.net/print_r)($_REQUEST, 1)?> </pre> | А выводит в отладку вот такую ерунду: Code (php): | скопировать код в буфер обмена | span class="st0">'ghgh'
-1 0
Request method: POST Loader used: xml _REQUEST: Array (www.php.net/array) ( [artist] => [genre] => [title] => [album] => [type] => all [play] => 0 [year] => [theme] => Tabular [dir (www.php.net/dir)] => [PHPSESSID] => 238b72cfed5b0cc7250d84a5b16eb420 [search] => ghgh [start_limit] => [end_limit] => ) | Меня смущают левые поля, которые идут до PHPSESSID. Я не могу понять, откуда они беруться?! А самое интересное, что это только при поисковой строке 'ghgh' или аналогичной типа 'ghghghgh' появляется.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 413 поощрить/наказать
|
Posted: Mon Dec 04, 2006 2:33 pm (спустя 4 минуты; написано за 21 секунду)
Post subject:
|
|
Infis wrote: |
Меня смущают левые поля, которые идут до PHPSESSID. Я не могу понять, откуда они беруться? | Скорее всего, из кук. Читайте описание $_REQUEST на php.net. Библиотека тут ни при чем.
|
|
Back to top |
|
 |
Infis
Guest
Карма: 388 поощрить/наказать
|
Posted: Mon Dec 04, 2006 6:09 pm (спустя 3 часа 36 минут; написано за 14 минут 55 секунд)
Post subject:
|
|
Дмитрий Котеров wrote: |
Скорее всего, из кук. Читайте описание $_REQUEST на php.net. Библиотека тут ни при чем. | Да. Действительно из кук. Спасибо! А то я просто в осадок ушел после вывода результатов :) Прошу прощения, что опубликовал весь код, просто я хотел показать, что там даже рядом нигде не встречаются переменные с таким именем. А можно еще один вопросик? Планируется ли в библиотеке добавить функцию серии последовательных запросов? Как видите, я не силен ни в javascript, ни в PHP. Было бы совсем неплохо расширить библиотеку такой функцией. А то приходится огород городить на ровном месте. Данная функциональность, я думаю, часто требуется. Приходится каждому свое выдумывать, хотя наверняка можно было бы сделать это универсальным. К сожалению я не могу самостоятельно доработать Вашу библиотеку, так как просто не хватит знаний. И еще. На форуме в этой ветке уже звучала фраза о том, что было бы совсем неплохо расширить библиотеку примеров, добавив более сложные функции. Возможно, задача, которую я пытаюсь решить (чтение скриптом на сервере кучи небольших файлов и выдача результатов, от мелких файлов уйти не удалось, так как обрабатывать один большой файл XML просто нереально долго получается и скрипту не хватает времени, которое указано по-умолчанию в настройках сервера), могла бы войти в библиотеку примеров. И полезно в качестве примера работы с библиотекой, делая очередность запросов, и полезно для новичков типа меня, которые недостаточно хорошо знают javascript и PHP. А вообще большая благодарность вам за библиотеку! Все-таки аналоги не могут сравниться с простотой использования Вашей библиотеки. Да и документированность с примерами вполне дает общее представление. К сожалению, документации как таковой нет, с описанием методов и очередности вызовов. Зачастую приходится делать несколько тестовых скриптов, которые позволяют разобраться с тем, как вообще все это работает. В общем, успехов! Ждем новых версий ;)
|
|
Back to top |
|
 |
Guest
Карма: 388 поощрить/наказать
|
Posted: Tue Dec 05, 2006 12:29 pm (спустя 18 часов 20 минут; написано за 7 минут 27 секунд)
Post subject:
|
|
[quote="wacky"]Здравствуйте! Я что-то пропустил, или обработчик timeout до сих пор не реализован ? Я для себя его написал еще в 3-й версии библитеки. [quote] А для чего нужен этот таймаут?
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 413 поощрить/наказать
|
Posted: Wed Dec 06, 2006 12:07 am (спустя 11 часов 38 минут; написано за 56 секунд)
Post subject:
|
|
Тайм-аут нужен для того, чтобы отследить обрыв соединения с сервером, когда идет загрузка данных. Не все лоадеры библиотеки поддерживают события при обрыве (например, SCRIPT и FORM - не поддерживают).
|
|
Back to top |
|
 |
phprus
Участник форума
Joined: 25 Jul 2003
Posts: 162
Карма: 8 поощрить/наказать
Location: Пермь
|
Posted: Fri Dec 08, 2006 4:33 pm (спустя 2 дня 16 часов 26 минут; написано за 2 минуты 26 секунд)
Post subject:
|
|
Дмитрий Котеров
Нашел небольшой баг в библиотеке. Если методу send просто передать строку, то прередача данных на сервер не произойдет, так как за пределами функции _hash2query массив queryText будет пустым. Судя по всему проблема в строчке queryText = [content]; в методе _hash2query, так как если ее заменить на конструкцию: Code (JavaScript): | скопировать код в буфер обмена | if (queryText instanceof Array) { queryText.splice(0); queryText[0] = content; } else { queryText = [content]; } | то все работает. Версия библиотеки 4.14.
|
|
Back to top |
|
 |
reactorx
Участник форума

Joined: 28 Feb 2006
Posts: 111
Карма: 1 поощрить/наказать
Location: RND
|
Posted: Sun Dec 10, 2006 5:32 am (спустя 1 день 12 часов 58 минут; написано за 10 минут 33 секунды)
Post subject:
|
|
Еще раз приветствую Вас Дмитрий Котеров
Вобщем вопрос в следующем... Вы реализовали передачу формы целиком.. В доке все прекрасно описано...НО! Могли бы Вы привести тут краткий пример каким образом можно отправить форму целиком используя краткий способ отправки данных...я говорю про метод query (JsHttpRequest.query) Ситуация в том что когда я пытаюсь это сделать у меня происходит следующая тема: в консоли ошибок высыпется это -- Ошибка: iframe has no properties Источник: my_pattern/js/jshttprequest/jshttprequest.js
Строка: 461 Предупреждение: Форма содержит атрибут "enctype=multipart/form-data", но не содержит атрибут "method=post". Вместо этого для отправки данных будет использоваться метод "GET" без указания типа содержимого. Источник: my_pattern/
Строка: 0 -- отправляю я форму так -- JsHttpRequest.query( index_file, {'url': document.getElementById('frm')}, function (responseJS, responseText) { alert('xxx'); if(responseJS.template == '404') { alert('doc 404 url is '+responseJS.content);} var node = eval("document.getElementById('"+responseJS.template+"')"); appendData(responseJS.content, node, responseJS.mode); }, true ); --- Вобщем до alert('xxx'); Дело не доходи... И!!! после того как сыпанулось в консоль ошибок.... Почему то меня перекидывает на другую страницу... т.е запрос идет не аджаксом а просто как на обычной странице... П.С Вобщем получается в итоге 2 вопроса) Можно пример отправки формы целиком по средством метода query и вотрой вопрос... (если все понятно изложил) в чем у меня может быть проблемма?
|
|
Back to top |
|
 |
reactorx
Участник форума

Joined: 28 Feb 2006
Posts: 111
Карма: 1 поощрить/наказать
Location: RND
|
Posted: Sun Dec 10, 2006 5:57 am (спустя 25 минут; написано за 40 секунд)
Post subject:
|
|
Добавка к предыдущему посту... а перекидывает меня на этот линк my_pattern/index.php5?PHPSESSID=99d94a5609de4b9c8c846912cd88a4d5&JsHttpRequest=11657194060810-form
Ну это если вам вдруг будут нужно
|
|
Back to top |
|
 |
phprus
Участник форума
Joined: 25 Jul 2003
Posts: 162
Карма: 8 поощрить/наказать
Location: Пермь
|
Posted: Sun Dec 10, 2006 11:51 am (спустя 5 часов 53 минуты; написано за 1 минуту 15 секунд)
Post subject:
|
|
reactorx wrote: |
Предупреждение: Форма содержит атрибут "enctype=multipart/form-data", но не содержит атрибут . | А если добавить то, что просит библиотека? То-есть атрибут method="post" То работать будет или нет?
|
|
Back to top |
|
 |
reactorx
Участник форума

Joined: 28 Feb 2006
Posts: 111
Карма: 1 поощрить/наказать
Location: RND
|
Posted: Sun Dec 10, 2006 4:04 pm (спустя 4 часа 12 минут; написано за 1 минуту 11 секунд)
Post subject:
|
|
phprus Да та же в принципе ситуация... пишет -- Ошибка: iframe has no properties Источник: my_pattern/js/jshttprequest/jshttprequest.js
Строка: 461 Ошибка: parent.JsHttpRequest has no properties Источник: my_pattern/index.php5?PHPSESSID=9b9f84ad411c235e76fa259737b075e4&JsHttpRequest=11657558053090-form
Строка: 3
|
|
Back to top |
|
 |
Юрий Насретдинов
Модератор

Joined: 13 Mar 2003
Posts: 8642
Карма: 198 поощрить/наказать
Location: 007 495
|
Posted: Mon Dec 11, 2006 1:39 pm (спустя 21 час 35 минут; написано за 18 секунд)
Post subject:
|
|
reactorx wrote: |
куда исчез господин Кóтеров)? | Да никуда он не исчез... Просто такие вопросы задаёте....
|
|
Back to top |
|
 |
reactorx
Участник форума

Joined: 28 Feb 2006
Posts: 111
Карма: 1 поощрить/наказать
Location: RND
|
Posted: Mon Dec 11, 2006 1:48 pm (спустя 8 минут; написано за 49 секунд)
Post subject:
|
|
Юpий Насрeтдинов пасиб.
|
|
Back to top |
|
 |
predator
Guest
Карма: 388 поощрить/наказать
|
Posted: Tue Dec 12, 2006 4:15 pm (спустя 1 день 2 часа 27 минут; написано за 2 минуты 32 секунды)
Post subject: не получется отправить данные методом POST
|
|
вот код: Code (JavaScript): | скопировать код в буфер обмена | get_req_exp({mode:'get_rooms'}, ch.draw_rooms);
function get_req_exp(obj,func) { var req=new JsHttpRequest(); if (func) { req.onreadystatechange = function() { if ( req.readyState == 4 ) { func(req.responseJS); } } } req.caching=false; req.open( 'POST', '/hr.php', true ); req.send( obj ); } | в файле /hr.php в начале проверяю $_POST массив - он пустой почему? пользовался раньше версией 3.x - всегда данные передавались постом без проблем почему в 4-ой проблемы (версия либы 4.15)? с уважением )
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 413 поощрить/наказать
|
Posted: Wed Dec 13, 2006 12:59 am (спустя 8 часов 44 минуты; написано за 41 секунду)
Post subject:
|
|
phprus: исправлено version 4.16: allow to pass scalar to send() (you may fetch it from QUERY_STRING in loader)
|
|
Back to top |
|
 |
|