За последние 24 часа нас посетили 18205 программистов и 1605 роботов. Сейчас ищет 1671 программист ...

AJAX для ЧАЙНИКОВ (вопросы)

Тема в разделе "JavaScript и AJAX", создана пользователем sc2r2bey, 3 июл 2009.

  1. sc2r2bey

    sc2r2bey Активный пользователь

    С нами с:
    25 апр 2009
    Сообщения:
    76
    Симпатии:
    0
    После дебатов в одном из своих постов начал изучать AJAX, в целом все предельно просто и понятно, но по ходу появляются вопросы, онтветы на которые буду задавать здесь в надежде получить на них ответы, заранее спасибо!

    1. вопрос - в материалах звучат такие понятия как объекты, экземпляры, методы и свойства. я так понял это их ООП, кто смог бы на пальцах объяснить что эти поняти означают или дать ссылку на статью, где на пальцах объясняют, что это такое ))
    2. вопрос - есть ли универсальный способ вызова объекта XMLHttpRequest, который работает во всех браузерах, пока нашел вото этот:
    Код (Text):
    1.  
    2. <script language="javascript" type="text/javascript">
    3. var request = false;
    4. try {
    5.     request = new XMLHttpRequest();
    6.     } catch (trymicrosoft) {
    7.       try {
    8.         request = new ActiveXObject("Msxml2.XMLHTTP");
    9.           } catch (othermicrosoft) {
    10.         try {
    11.             request = new ActiveXObject("Microsoft.XMLHTTP");
    12.             } catch (failed) {
    13.               request = false;
    14.             }
    15.         }
    16.     }
    17. if (!request)
    18.     alert("Error initializing XMLHttpRequest!");
    19. </script>
    пока все вызревает ряд вопросов, ограничусь пока этим.

    в общем начал изучать материал, в целом понятно, что не может не радовать, много надо будет изучить, взял почти готовый код, разобрал что по чем, но возникло ряд вопросов и ошибок, сам код потом вопросы ))
    Код (Text):
    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional-dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
    5.  
    6. <title>Изучаем AJAX</title>
    7.  
    8. <script language="javascript" type="text/javascript">
    9.     var request = false;
    10.     try {
    11.         request = new XMLHttpRequest();
    12.             } catch (trymicrosoft) {
    13.             try {
    14.             request = new ActiveXObject("Msxml2.XMLHTTP");
    15.             } catch (othermicrosoft) {
    16.             try {
    17.                 request = new ActiveXObject("Microsoft.XMLHTTP");
    18.                 } catch (failed) {
    19.                 request = false;
    20.                 }
    21.         }
    22.     }
    23.     if (!request)
    24.        alert("Error initializing XMLHttpRequest!");
    25.  
    26.     function getCustomerInfo() {
    27.         var phone = document.getElementById("phone").value;
    28.         var url = "/include/xtr.php?phone=" + escape(phone);
    29.         request.open("GET", url, true);
    30.         request.onreadystatechange = updatePage;
    31.         request.send(null);
    32.     }
    33.  
    34.     function updatePage() {
    35.         if (request.readyState == 4) {
    36.             if (request.status == 200) {
    37.                 var response = request.responseText.split("|");
    38.                 document.getElementById("order").value = response[0];
    39.                 document.getElementById("address").innerHTML = response[1].replace(/\n/g, " ");
    40.             } else
    41.                 alert("status is " + request.status);
    42.         }
    43.     }
    44. </script>
    45. </head>
    46. <body>
    47.     <form action="POST">
    48.         <p>Enter your phone number:
    49.         <input type="text" size="14" name="phone" id="phone"
    50.         onChange="getCustomerInfo();" />
    51.         </p>
    52.         <p>Your order will be delivered to:</p>
    53.         <div id="address"></div>
    54.         <p>Type your order in here:</p>
    55.         <p><textarea name="order" rows="6" cols="50" id="order"></textarea></p>
    56.         <p><input type="submit" value="Order Pizza" id="submit" /></p>
    57.     </form>
    58. </body>
    59. </html>
    Вопрос 1. не подгружает введенные данные, т.е. не работает, а переходит по ссылке http://xhr/POST?phone=999999999999&order=blablabla
    в чем может быть ошибка?

    Вопрос 2. как можно оптимизировать сей код после исправления ошибки?

    Вопрос 3. где можно глубже изучить метод getElementById() ?

    Вопрос 4. как происходит в данном случае обмен данными между javascript и php

    Вопрос 5. как подставляется url в форму?

    Думаю достаточно, спасибо!
     
  2. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
  3. sc2r2bey

    sc2r2bey Активный пользователь

    С нами с:
    25 апр 2009
    Сообщения:
    76
    Симпатии:
    0
    спасибо, а это к чему?
     
  4. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    это я к тому, что с jQuery все эти запросы на сервер делаются намного проще.
     
  5. sc2r2bey

    sc2r2bey Активный пользователь

    С нами с:
    25 апр 2009
    Сообщения:
    76
    Симпатии:
    0
    то предлагают изучить xmlhttprequest, оставить в покое jquery, то теперь наоборот )))))

    я вот подправил код, страница не перезагружается, но не выводиться данные :(

    Код (Text):
    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional-dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
    5.  
    6. <title>Изучаем AJAX</title>
    7.  
    8. <script language="javascript" type="text/javascript">
    9.     var request = false;
    10.     try {
    11.         request = new XMLHttpRequest();
    12.             } catch (trymicrosoft) {
    13.             try {
    14.             request = new ActiveXObject("Msxml2.XMLHTTP");
    15.             } catch (othermicrosoft) {
    16.             try {
    17.                 request = new ActiveXObject("Microsoft.XMLHTTP");
    18.                 } catch (failed) {
    19.                 request = false;
    20.                 }
    21.         }
    22.     }
    23.     if (!request)
    24.        alert("Error initializing XMLHttpRequest!");
    25.  
    26.     function getCustomerInfo() {
    27.         var phone = document.getElementById("phone").value;
    28.         var url = "/include/xtr.php?phone=" + escape(phone);
    29.         request.open("GET", url, true);
    30.         request.onreadystatechange = updatePage;
    31.         request.send(null);
    32.     }
    33.  
    34.     function updatePage() {
    35.         if (request.readyState == 4) {
    36.             if (request.status == 200) {
    37.                 var response = request.responseText.split("|");
    38.                 document.getElementById("order").value = response[0];
    39.                 document.getElementById("address").innerHTML = response[1].replace(/\n/g, " ");
    40.             } else
    41.                 alert("status is " + request.status);
    42.         }
    43.     }
    44. </script>
    45. </head>
    46. <body>
    47.     <form>
    48.         <p>Enter your phone number:
    49.         <input type="text" size="14" name="phone" id="phone"
    50.         onChange="getCustomerInfo();" />
    51.         </p>
    52.         <p>Your order will be delivered to:</p>
    53.         <div id="address"></div>
    54.         <p>Type your order in here:</p>
    55.         <p><textarea name="order" rows="6" cols="50" id="order"></textarea></p>
    56.         <p><input type="submit" value="Order Pizza" id="submit" /></p>
    57.     </form>
    58. </body>
    59. </html>
     
  6. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    поставь firebug (плагин для Firefox) и посмотри че там происходит ваще.
     
  7. sc2r2bey

    sc2r2bey Активный пользователь

    С нами с:
    25 апр 2009
    Сообщения:
    76
    Симпатии:
    0
    я им не умею пользоваться, поставил, чисто интуитивно попробую через брейк поинт )) ругается на
    Код (Text):
    1.  
    2.                 document.getElementById("address").innerHTML = response[1].replace(/\n/g, " ");
    response[1] is underfined

    вот ошибка, как исправить?
     
  8. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    перед этой строкой добавь
    console.log(response);

    потом открой консоль в фаербаге, смотри что выведется. Также там будет показан запрос на сервер, какие хедеры с ним отправлены и че сервер вернул. Смотри, анализируй.
     
  9. sc2r2bey

    sc2r2bey Активный пользователь

    С нами с:
    25 апр 2009
    Сообщения:
    76
    Симпатии:
    0
    чтото ff 3.5 тупит
     
  10. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    sc2r2bey, ты уж извини, но, я думаю, тупит не fx
     
  11. sc2r2bey

    sc2r2bey Активный пользователь

    С нами с:
    25 апр 2009
    Сообщения:
    76
    Симпатии:
    0
    я имел ввиду долго работает, виснет, поставил 3.0.11 все летает

    собственно вот что получилось сложно делать выводы, подскажите:
    Response Headers
    Date

    Fri, 03 Jul 2009 19:16:27 GMT

    Server

    Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8d PHP/5.2.4

    X-Powered-By

    PHP/5.2.4

    Content-Length

    0

    Keep-Alive

    timeout=5, max=100

    Connection

    Keep-Alive

    Content-Type

    text/html; charset=windows-1251

    Request Headers
    Host

    xhr

    User-Agent

    Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.11) Gecko/2009060215 MRA 5.5 (build 02746) Firefox
    /3.0.11 (.NET CLR 3.5.30729)

    Accept

    text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

    Accept-Language

    ru,en-us;q=0.7,en;q=0.3

    Accept-Encoding

    gzip,deflate

    Accept-Charset

    windows-1251,utf-8;q=0.7,*;q=0.7

    Keep-Alive

    300

    Connection

    keep-alive

    Referer

    http://xhr/xhr.html

    [""]
    response[1] is undefined
    updatePage()xhr.html (line 40)
    [Break on this error] document.getElementById(...rHTML = response[1].replace(/\n/g, " ");
     
  12. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    [""] - php-скрипт нифига не возвращает.
     
  13. sc2r2bey

    sc2r2bey Активный пользователь

    С нами с:
    25 апр 2009
    Сообщения:
    76
    Симпатии:
    0
    ну он пустой ))) а как передать из него переменную во 2-й элемент массива? в сам ом простом варианте
    Кос, кстати спасибо большое!!!
     
  14. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Использовать разделение контента. Советую использовать JSON, тем более, что сейчас в РНР встроенная поддержка. Одна функция делаем из массива JSON, потом у клиента это через eval прогоняется и получается объект.

    Javascript ходит по DOM дереву, ищет id (вроде так), заданный в методе и возвращает объект элемента (тега).
     
  15. sc2r2bey

    sc2r2bey Активный пользователь

    С нами с:
    25 апр 2009
    Сообщения:
    76
    Симпатии:
    0
    пасиб!