Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос по AJAX  (Прочитано 8109 раз)
0 Пользователей и 1 Гость смотрят эту тему.
XXX
Участник

ru
Offline Offline

« : 23-06-2012 15:44 » 

Подскажите, пожалуйста, как реализовать аяксовый запрос к серверу.
Чтобы в поле "Введите номер книги:" вводили число, а ответ писал в блок divResult
Список книг хранится в books.txt
 Такой сервер getbooktxt.php:
Код:
<?php
// Имя файла со списком книг
define(&#39;BOOKS_FILE&#39;, &#39;books.txt&#39;);
// Название параметра GET
define(&#39;NUM&#39;, &#39;num&#39;);
// Передача текса в кодировке UTF-8
header(&#39;Content-type: text/plain; charset=utf-8&#39;);
// Запрет кеширования
header(&#39;Cache-COntrol: no-store, no-cache&#39;);
header(&#39;Expires: &#39; . date(&#39;r&#39;));

// Чтение файла
$books file(BOOKS_FILE);

// Проверка параметра num
if (isset($_GET[NUM]))
{
// Парметр указан
$num = (int) $_GET[NUM];
if ($num count($books) && $num >= 0)
echo $books[$num];
else
echo &#39;Книга не найдена&#39;;
}
else
{
// Парметр не указан, возвращаем число книг
echo count($books);
}
?>
Клиент:
Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru" dir="ltr">
<head>
<title>Список книг</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="Content-Language" content="ru" />
<script type="text/javascript">
/*
** функция создания объекта XmlHttpRequest
**     function getXmlHttpRequest()
*/
    function getXmlHttpRequest()
{
if (window.XMLHttpRequest)
{
try
{
return new XMLHttpRequest();
}
catch (e){}
}
else if (window.ActiveXObject)
{
try
{
return new ActiveXObject('Msxml2.XMLHTTP');
} catch (e){}
try
{
return new ActiveXObject('Microsoft.XMLHTTP');
}
catch (e){}
}
return null;
}

/*
** Функция запроса к серверу (getbooktxt.php),
** которая АСИНХРОННО запрашивает нужную книгу по номеру (getbooktxt.php?num=1)
** и выводит строку с названием этой книги в элемент divResult HTML страницы
**     function getBookByNumber(number)
*/

//var bookNum = "getbooktxt.php?num=3";
var req;

function getBookByNumber(number)
{
// Запрос
req = getXmlHttpRequest();
req.onreadystatechange = showBook();
req.open("GET", number, true);
req.send(null);
}

/*
**
** Эта функция должна прочитать введенное значение в поле txtNum
** и вызвать функцию getBookByNumber(value)
**     function showBook()
*/

// Завершение асинхронного запроса
function showBook()
{
// только при состоянии "complete"
if (req.readyState == 4)
{
var number = document.getElementById("txtNum").nodeValue;
var result = document.getElementById("divResult");
result.firstChild.nodeValue = req.responseText;
}
}

</script>
</head>
<body>
<h1>Список книг</h1>
<form onsubmit="return false">
<label for="txtNum">Введите номер книги:</label>
<input id="txtNum" type="text" />
<button onclick="showBook()">Поиск</button>
</form>
<div id="divResult">text</div>
</body>
</html>
« Последнее редактирование: 23-06-2012 17:08 от XXX » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 23-06-2012 17:02 » 

XXX, непонятно. По виду всё написано. Чего же боле?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
XXX
Участник

ru
Offline Offline

« Ответ #2 : 23-06-2012 17:10 » 

Сейчас поправила клиента.. Т.к. из txtNum должно значение браться.. Не работает.. Что-то не так делаю..
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 23-06-2012 18:03 » 

XXX, так отладить надо.

1) Отрабатывает ли запрос к серверу (послать запрос с помощью telnet и посмотреть ответ). В правильном ли формате приходит ответ.
2) Посылает ли клиент запрос к серверу (посмотреть по логам сервера).
3) Отладить клиента (либо отладчиком через точки останова, если браузер поддерживает, либо размещением отладочных alert'ов в подозрительных местах).
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 23-06-2012 18:27 » 

Dimka, та ничего не написано...

Где сам запрос?
Кто его генерирует?

Ка работает ajax

клиент отсылает запрос (грубо.. это что здесь названо XMLHttpRequest), установив обработчик ответа (callback)
И в обработчике уже выводить.

С точки зрения обучения, начинать с азов при работе с аяксом  можно только при очень большом желании

Проще использовать фреймворк (jquery например), или готовые библиотеки (например http://www.twilightuniverse.com/?page_id=243)
Почему проще? Потому что читая код и примеры использования можно хоть чуть-чуть подучить сам js-скриптинг.

вот пример кода при использовании указанной библиотеки
Код:
function Start(){
var button = document.getElementById('go');
if (button.value == 'Start') {
button.value='Stop';
timer=setTimeout(function () {getList()},delay);
} else {
button.value='Start';
clearTimeout(timer);
}
}
function getList(){
var index = ajax.length;
ajax[index] = new sack();
ajax[index].requestFile = 'ajax.php?numpage='+numpage; // Specifying which file to get
ajax[index].onCompletion = function(){
numpage++;
writeLog(index);
// timer=setTimeout(function () {getList()},delay);

}; // Specify function that will be executed after file has been found
ajax[index].runAJAX(); // Execute AJAX function
}
код выдран с работающего проекта, именно выдран и адаптирован под пример


Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines