Ajax "Hello World" возможно ли?

Статус
В этой теме нельзя размещать новые ответы.

Danko

Новичок
Ajax "Hello World" возможно ли?

Программирую на РНР с вкраплениями JavaScript, начал читать об Ajax-е, нутром понимаю, но написать пракически немогу.
Помогите разобраться с технологией, документации прочитал кучу и примеров насмотрелся.
Если можно попроще как применить XMLHttpRequest для подкачки части скрипта, точнее скрипта, который должен изменить часть HTML кода, и почему на рабочих сайтах не видно самого HTML кода (скрипт ведь должен его поменять).
Читал тут:
http://www.adaptivepath.com/publications/essays/archives/000385.php
http://rapidshare.de/files/32679635/001280.rar.html
http://www.webmascon.com/topics/technologies/13a.asp
http://dklab.ru/lib/Subsys_JsHttpRequest/
http://developer.apple.com/internet/webcontent/xmlhttpreq.html
-----------------------------------------
В принципе, я даже понял зачем onreadystatechange но на рабочих сайтах не встретил его применения.
Возможно ли написать код на Ajax для изменения сообщения
например, есть РНР файл mess.php в котором 1 строка
if ($world==1) $mes="Hello" else $mes="Hi";
и в зависимости от значения $world поменять на странице сообщение.

P.S. Привожу к тупому, дабы достичь совершенства.
 

Фанат

oncle terrible
Команда форума
ты вообще никак не пытался сделать, что ли?
ни единой строчки кода не написал?
 

Danko

Новичок
Автор оригинала: Фанат
ты вообще никак не пытался сделать, что ли?
ни единой строчки кода не написал?
А что писать, если нет никакого результата - сплошные ошибки
 

Фанат

oncle terrible
Команда форума
ошибки - это отличный результат. Они подсказывают тебе, как исправить твой код.
 

Danko

Новичок
Во всех ссылках, которые я указывал выше, примеры не законченные, или я туплю, в кучу связать не могу
 

aleks_raiden

Новичок
AJAX в действии - ищи книжку, вышла теперь и на русском. А вообще - ну неверю я, что ничего не получается, это настолько травиально и на указанных сайтах и куче других так разжевано, что вряд ли неполучается, если только из правильного места рки и голова растет.
 

Danko

Новичок
Вся проблема в том, что каждый опирается на уже готовые какие-то скрипты, а хотелось бы наваять с ноля и понять что к чему.
В тех скриптах килобайты кода, неужели для елементарных примеров нельзя обойтись десятком строчек?
 

denver

?>Скриптер
Дофига ресурсов где это разжевано как для детей. Тут например:
http://developer.mozilla.org/en/docs/AJAX:Getting_Started

Если не получится нифига, значит и AJAX тебе не нужен))
 

Danko

Новичок
вот к чему я пришел исходя из примеров:

PHP:
index.html

<input id="username" name="username" type="text" />

<div id="result" style="border:1px solid #000; margin:2px">
    Results
</div>

<script language="JavaScript" 
 src="load.php?test=TestTestTestTestTestTest"></script>




load.php

<? echo "document.getElementById('result').innerHTML = '".$test."'" ?>
дальше - тупик. К полю привязать не выходит. Я понимаю, что это не Аякс, но начинается все с этого.
 

Фанат

oncle terrible
Команда форума
вообще, надо признать, что ты молодец.
правильно мыслишь. в плане того, что начинать надо с простых примеров, и этих примеров нигде нет.

по поводу твоего кода.
во-первых, не видно события, по которому происходит вызов сервера через аякс.
во-вторых, попобуй посмотреть у Котерова в его билиотеке - как он меняет src
 

Danko

Новичок
почитав здесь http://developer.mozilla.org/en/docs/AJAX:Getting_Started я разобрался вот в этом коде и немного изменил:

PHP:
index.html

<script type="text/javascript" language="javascript">
    function makeRequest(url) {
        var http_request = false;

        if (window.XMLHttpRequest) { // Mozilla, Safari, ...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');
                // See note below about this line
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!http_request) {
            alert('Giving up :( Cannot create an XMLHTTP instance');
            return false;
        }
        http_request.onreadystatechange = function() { alertContents(http_request); };
        http_request.open('GET', url, true);
        http_request.send(null);

    }

    function alertContents(http_request) {

        if (http_request.readyState == 4) {
            if (http_request.status == 200) {
                document.getElementById('ress').innerHTML = http_request.responseText;
            } else {
                alert('There was a problem with the request.');
            }
        }

    }
</script>
<span
    style="cursor: pointer; text-decoration: underline"
    onclick="makeRequest('load.php?test=TestTestTestTestTestTest')">
        Make a request
</span>
<span id="ress">
</span>
<div id="result" style="border:1px solid #000; margin:2px">
    Results
</div>


load.php

<? echo '<script type="text/javascript" language="javascript">';
   echo "document.getElementById('result').innerHTML = '".$_GET['test']."' </script>" ?>
НО....
пока я напрямую писал в index.html
PHP:
document.getElementById('result').innerHTML = http_request.responseText;
а в load.php
PHP:
<? echo $_GET['test'] ?>
работало, а когда я начал в php коде формировать скрипт - не выполняется.

Подскажите, я неправильно формирую скрипт или так не положено?
 

Фанат

oncle terrible
Команда форума
ну, само понятие AJAX подразумевает, что сервер формирует не скрипт, а XML.
может быть, в эту сторону копать?

вообще, я не очень силён в этой теме, но за неимением других отвечающих...
 

denver

?>Скриптер
Danko
Если ты хочешь чтобы возращался javascript то делаей

if (http_request.status == 200) {
eval(http_request.responseText);
} else {


load.php
PHP:
<?
echo 'document.getElementById('result').innerHTML = '".$_GET['test'].";"
// блин, разберись тут с кавычками
?>
Гораздо круче получать XML и обрабатывать его, но для этого нужно уметь работать с DOM и вообще желательно знать javascript продвинуто.
 

Danko

Новичок
Гораздо круче получать XML и обрабатывать его, но для этого нужно уметь работать с DOM и вообще желательно знать javascript продвинуто.
Кажись, я идею понял. XML получать удобнее и обрабатывать его в скрипте, т.к. скрипт уже закачан клиенту и ему нужны только данные, а если формировать в php скрипт то: 1 - больше весит, 2 - нужно время для обработки клинтом скрипта и его выполнение.

Или я опять напутал что-то?
 

denver

?>Скриптер
Ага, все правильно понял. XML чтобы доставить данные. JS чтобы эти данные оформлять и выводить куда надо.

-~{}~ 14.09.06 15:06:

Если отправаляешь XML то можно его и через http_request.responseText получать, но тогда нельзя будет его через DOM обрабатывать.
А через дом нужно юзать http_request.responseXML, примерно так:

http_request.responseXML.documentElement.getElementsByTagName('data') ... ну вобщем понятно что дальше если понятно что такое DOM :)
 

Danko

Новичок
Автор оригинала: denver
Если отправаляешь XML то можно его и через http_request.responseText получать, но тогда нельзя будет его через DOM обрабатывать.
А через дом нужно юзать http_request.responseXML, примерно так:
http_request.responseXML.documentElement.getElementsByTagName('data') ... ну вобщем понятно что дальше если понятно что такое DOM :)
C XML я понял, но вот еще вопрос. Если PHP код возвращает в Яву-скрипт строку такого типа "111111 ^ 2222222 # 3333333 ^ 4444444" и скрипт потом ее парсит (причем успешно) и результат виден на странице. НО брайзер попутно выдает ошибку:
---------------------------------
Ошибка: неправильный
Источник: http://localhost/~tel/load_abon.php?id_otd=601
Строка 1, символ 10
Исходный код:
111111 ^ 2222222 # 3333333 ^ 4444444 #
---------------------------------
Пока HTML код подготавливался полностью в PHP проблемы небыло.

Вот действующий код:
PHP:
    function LoadAbon(id_otd) {
        var http_request = false;

        if (window.XMLHttpRequest) { // Mozilla, Safari, ...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');
                // See note below about this line
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!http_request) {
            alert('Giving up :( Cannot create an XMLHTTP instance');
            return false;
        }
        http_request.onreadystatechange = function() { updateAbon(http_request,id_otd); };
        http_request.open('GET', 'load_abon.php?id_otd='+id_otd, true);
        http_request.send(null);

    }

    function updateAbon(http_request,id_otd) {

	var listAbon = new Array();
	var tmplistAbon = new Array();
	var str;
        if (http_request.readyState == 4) {
            if (http_request.status == 200) {
                listTown=http_request.responseText.split('#');
			str='<select name="id_abon"><option value="-1"';
			if (id_otd == -1) { str=str+' disabled ';}
			str=str+'>0 : Всі </option>';
			for(var j = 0; j < (listAbon.length-1); j++) {
				tmplistAbon=listAbon[j].split('^');
				str=str+"<option value='"+tmplistAbon[0]+"'>"+tmplistAbon[1]+"</option>";
			}
			str=str+"</select>";
			document.getElementById('abons_vid').innerHTML = str;
            } else {
                alert('There was a problem with the request.');
            }
        }

    }
 

Фанат

oncle terrible
Команда форума
а с каким заголовком PHP код возвращает в Яву-скрипт строку такого типа?
 

Danko

Новичок
Автор оригинала: Фанат
а с каким заголовком PHP код возвращает в Яву-скрипт строку такого типа?
PHP:
header('Content-Type: text/html; charset=windows-1251');
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
 

collapse

Новичок
На самом деле я лично с Ajax - ом разобрался за день. JavaScript отправляет запрос в PHP-файл и возвращет резльтат. В php файле все результаты забивем в $_REQUEST.
А dom нужен в данном случае для изменения страницы, то есть вывода сообщений результата работы PHP скрипта. О DOM есть инфа на XHTML.ru например.
Вот есть у нас в документе табличка. Хотим туда вставить строку красного цвета с 2-мя ячейками:

table = document.getElementById('id_table');
tbody = table.children[0];
tr = document.createElement('TR');
td1 = document.createElement('TD');
td2 = document.createElement('TD');
tr.appendChild(td1);
tr.appendChild(td2);
tr.setAttribute('bgcolor','red');
tbody.appendChild(tr);
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху