Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Кто прораммирует на ajax?
 
 автор: CrazyAngel   (10.07.2006 в 13:46)   письмо автору
 
 

Я хочу научиться прораммировать на ajax,
Можете на словах объяснить как такое сделать =)

есть обычная форма

<form action="script.php">
<input type=text name=name><br>
<input type=submit value="Send">
<div id="answer"></div>


script.php

<?
if($_GET['name']=="CrazyAngel")
echo 
"О здарова чувак!!!";
else
echo 
"кто ты?"
?>


вот как сделать чтоб ответ сервера появлялся в том диве без перезагрузки страници? =)

   
 
 автор: Crux   (10.07.2006 в 15:10)   письмо автору
 
   для: CrazyAngel   (10.07.2006 в 13:46)
 

на скорую руку

<!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">
<head>
<title>XML Test</title>

<script language="javascript">
var req;

function loadDoc(url) {
url = url +'?name=' + document.forms.frm.name.value;
alert(url)
    // для "родного" XMLHttpRequest
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = processReqChange;
        req.open("GET", url, true);
        req.send(null);
        
    // для версии с ActiveX
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send();
        }
    }
}

function processReqChange() {
    // только пр состоянии "complete"

    if (req.readyState == 4) {
        // для статуса "OK"
        if (req.status == 200) {
            // здесь идут всякии штуки с полученным ответом
 
            document.getElementById('answer').innerHTML=req.responseText
        } else {
            alert("Не удалось получить данные:\n" +
                req.statusText);
        }
    }

</script>
</head>

<body>
<form name=frm>
<input type=text name=name><br>
<input type=button value="Send" onclick="loadDoc('script.php')">
<div id="answer"></div>

</body>
</html>


только в файле script.php, необходимы хедеры: запрет на кеширование и указать кодировку

   
 
 автор: CrazyAngel   (10.07.2006 в 15:38)   письмо автору
 
   для: Crux   (10.07.2006 в 15:10)
 

Спасибо, но что за окно вылазит с моим гет запросом?

   
 
 автор: Crux   (10.07.2006 в 19:12)   письмо автору
 
   для: CrazyAngel   (10.07.2006 в 15:38)
 

это технические включения:) или просто забыл убрать alert()


....
function loadDoc(url) {
url = url +'?name=' + document.forms.frm.name.value;
alert(url)
    // для "родного" XMLHttpRequest
    if (window.XMLHttpRequest) {
....

   
 
 автор: elenaki   (10.07.2006 в 22:08)   письмо автору
 
   для: Crux   (10.07.2006 в 19:12)
 

стесняюсь спросить - и что? выводит русский текст? у меня не выводит...
в alert(url) еще выводит, а в req.responseText - нет, одни ????
кодировки прописаны везде.

   
 
 автор: CrazyAngel   (10.07.2006 в 22:23)   письмо автору
 
   для: elenaki   (10.07.2006 в 22:08)
 

У меня все ok, незнаю, я даже кодировки не ставил ни где
прям так как тут все скопировал и все.

вот те два файла =)

   
 
 автор: Crux   (10.07.2006 в 23:20)   письмо автору
 
   для: CrazyAngel   (10.07.2006 в 22:23)
 

Для корректной работы с XMLHttpRequest, ваш PHP скрипт должен посылать ряд заголовков, а именно: тип содержимого и его кодировку (важно, если вы хотите работать с кириллическим выводом), а также параметры кеширования содержимого — нужно устранить любое кеширование (кажется ИЕ (или какой-то другой браузер) кеширует это дело с большим удовольствием).

header("Content-type: text/plain; charset=windows-1251");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);

   
 
 автор: elenaki   (11.07.2006 в 10:06)   письмо автору
 
   для: Crux   (10.07.2006 в 23:20)
 

да. с хедерами выводит. надо будет воспользоваться этим методом. я пока сделала через
XML. ну там это и быстрее будет. потому как данные в запросе не меняются - по клику на
области открываются районы этой области, по клику на районе - города. я просто создала
115 файлов XML, самый большой из которых 20К, и читала их java-script'ом.
а теперь можно попробовать и к базе делать запросы... Спасибо! не могу нарадоваться,
какой тут все-таки мудрый форум.

   
 
 автор: Panker   (12.07.2006 в 22:01)   письмо автору
 
   для: elenaki   (11.07.2006 в 10:06)
 

плиз ) помогите разобратся )) с годировкой хрень ужасная :(
и на счёт
header("Content-type: text/plain; charset=windows-1251");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
не понел куда их сувать :)))

   
 
 автор: CrazyAngel   (12.07.2006 в 22:07)   письмо автору
 
   для: Panker   (12.07.2006 в 22:01)
 

в php код
в html там все прописанно уже

   
 
 автор: Panker   (12.07.2006 в 22:35)   письмо автору
 
   для: CrazyAngel   (12.07.2006 в 22:07)
 

gпрост иа как это дурацкое сообшение вылезающее убрать типавы идёте тудато :)

   
 
 автор: CrazyAngel   (12.07.2006 в 23:06)   письмо автору
 
   для: Panker   (12.07.2006 в 22:35)
 

Читай выше =) я такой же вопрос задал =))
Надо просто убрать тестовый alert =)))


<!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">
<head>
<title>XML Test</title>

<script language="javascript">
var req;

function loadDoc(url) {
url = url +'?name=' + document.forms.frm.name.value;
alert(url)
    // для "родного" XMLHttpRequest
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = processReqChange;
        req.open("GET", url, true);
        req.send(null);
        
    // для версии с ActiveX
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send();
        }
    }
}

function processReqChange() {
    // только пр состоянии "complete"

    if (req.readyState == 4) {
        // для статуса "OK"
        if (req.status == 200) {
            // здесь идут всякии штуки с полученным ответом

            document.getElementById('answer').innerHTML=req.responseText
        } else {
            alert("Не удалось получить данные:\n" +
                req.statusText);
        }
    }
}
</script>
</head>

<body>
<form name=frm>
<input type=text name=name><br>
<input type=button value="Send" onclick="loadDoc('script.php')">
<div id="answer"></div>

</body>
</html> 

   
 
 автор: Panker   (12.07.2006 в 23:41)   письмо автору
 
   для: CrazyAngel   (12.07.2006 в 23:06)
 

прости не поделишся как ты это применил :)) хех )

   
 
 автор: CrazyAngel   (12.07.2006 в 23:43)   письмо автору
 
   для: Panker   (12.07.2006 в 23:41)
 

Я делаю рассылку, и там можно будет подписать без перезагрузки =)

   
 
 автор: Panker   (13.07.2006 в 00:30)   письмо автору
 
   для: CrazyAngel   (12.07.2006 в 23:43)
 

крутой перец )))
ладненько )) пасибо :)
тоже сделаю тока из за этого рассылку :)))))))))))

   
 
 автор: Panker   (14.07.2006 в 16:27)   письмо автору
 
   для: Panker   (13.07.2006 в 00:30)
 

прсотите ) за тупость ) но малоли у кого ещё какиенить мелкие скриптики на аяксе есть ) сбросьте что нит :)) ваще классненько так покапатся )
да и на сайтик поставить ) оригенально и понтова :) сори если что )
и ещё кое что!
плиз помогите добавить в этот скрипт
<script language="javascript"> 
var req; 

function loadDoc(url) { 
url = url +'?mail=' + document.forms.pages.mail.value; 
    // для "родного" XMLHttpRequest 
    if (window.XMLHttpRequest) { 
        req = new XMLHttpRequest(); 
        req.onreadystatechange = processReqChange; 
        req.open("GET", url, true); 
        req.send(null); 
         
    // для версии с ActiveX 
    } else if (window.ActiveXObject) { 
        req = new ActiveXObject("Microsoft.XMLHTTP"); 
        if (req) { 
            req.onreadystatechange = processReqChange; 
            req.open("GET", url, true); 
            req.send(); 
        } 
    } 


function processReqChange() { 
    // только пр состоянии "complete" 

    if (req.readyState == 4) { 
        // для статуса "OK" 
        if (req.status == 200) { 
            // здесь идут всякии штуки с полученным ответом 
  
            document.getElementById('answer').innerHTML=req.responseText 
        } else { 
            alert("Не удалось получить данные:\n" + 
                req.statusText); 
        } 
    } 
}  
</script> 

что бы ещё поле URL передавалось! а то тут тока mail
просто я маил и урл передаю из 2х полей а передаётся почему то то маил :(

   
 
 автор: Crux   (15.07.2006 в 18:15)   письмо автору
 
   для: Panker   (14.07.2006 в 16:27)
 

и вчём собственно сложность?
строка

url = url +'?mail=' + document.forms.pages.mail.value;  

формирует GET запрос, в сущности обычный web-адрес.
следовательно в форме добавляете input с именем (например) link
строка запроса меняется

url = url +'?mail=' + document.forms.pages.mail.value+'&link='+document.forms.pages.link.value;  

   
 
 автор: GлюК   (17.07.2006 в 03:07)   письмо автору
 
   для: Crux   (15.07.2006 в 18:15)
 

А можно маленько поподробнее объяснить значение этих строчек?

if (req.readyState == 4) // только пр состоянии "complete" 

и

if (req.status == 200)

   
 
 автор: Crux   (17.07.2006 в 09:27)   письмо автору
 
   для: GлюК   (17.07.2006 в 03:07)
 

readyState
значения статуса (integer), может принимать следующие значения: 0 = неинициализирован (uninitialized); 1 = «идет загрузка» (loading); 2 = «загружен» (loaded); 3 = «интерактивен» (interactive) 4 = «выполнен» (complete)

т.е. ждём пока докумен загрузется.

status
стандартный HTTP код статуса, например 404 (для «Not Found») или 200 (для «OK»)

т.е. делаем проверку на безошибочное выполнение скрипта.

   
 
 автор: GлюК   (18.07.2006 в 00:08)   письмо автору
 
   для: Crux   (17.07.2006 в 09:27)
 

Всё понял, спасибо!

   
 
 автор: cyberface   (18.07.2006 в 09:34)   письмо автору
 
   для: Crux   (10.07.2006 в 15:10)
 

А меня такой вопрос интерисует:
Как быть, если у меня несколько форм? Не писать же для каждой формы свою функцию. Или писать?

и как подгрузить документ нажатием на ссылку?
Едит:
Про ссылку ненадо, сам разобрался

Едит:

Вопрос такого рода (пересекается с первым)
вот у меня есть такой код:


<div id="1">
бла бла бла бла бла
</div>

<div id="2">
бла бла бла бла бла
</div>

<div id="3">
бла бла бла бла бла
</div>

По идее, в каждом слое должна быть ссылка - нажимешь ее, и содержаение слоя изменяется. Но у всех слоев разный id. Как же быть?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования