przyklad z AJAX, problem z uruchomieniem

0

http://gajdaw.pl/ajax/wprowadzenie/p6.html - tu jest fajny przyklad z AJAX z aparatami

probuje go polaczyc w calosc i uruchomic, co tu jest nie tak ? (zamiast tak ladnie dzialac jak na screenach na tej stronie) mam brzydko wyswietlane dwie nazwy aparatu, zadna funkcjonalnosc nie dziala


<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>Przyklad AJAX</title>
	<!--<script type="text/javascript" src="zad2.js" ></script> -->
	<!--<link rel="stylesheet" href="zad2.css" type="text/css" /> -->
	<meta name="author" content="Unknown"/>
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />


<script type="text/javascript">
function getXMLHttpRequest()
{
  {
  var request = false;
    
  try {
    request = new XMLHttpRequest();
  } catch(err1) {
    try {
      request = new ActiveXObject('Msxml2.XMLHTTP');
    } catch(err2) {
      try {
        request = new ActiveXObject('Microsoft.XMLHTTP');                
      } catch(err3) {
        request = false;
      }
    }
  }
  return request;
}  
}    

var r;
r = getXMLHttpRequest();    

var opis= new Array(20);
opis[0]  = 'Producent';
opis[1]  = 'Model';
opis[2]  = 'Typ';


var element;

function processResponse()
{
  if (r.readyState == 4) {
    if (r.status == 200) {

      var x = r.responseXML.getElementsByTagName('aparat')[0].childNodes;

      var tmp = '';

      for (i = 2; i < x.length; i++) {
        tmp = tmp
          + '<strong>' + opis[i] + ':</strong> '
	  + x[i].childNodes[0].nodeValue
	  + '<br />';
      }

      element.innerHTML = tmp;
    };
  }
}

function expandCollapse(Id, Numer)
{
  
  
  element = Id.parentNode.parentNode.childNodes[1];
  if (element.style.display == 'block') {
    element.style.display = 'none';
    Id.innerHTML = '+';
  } else {
    element.style.display = 'block';
    Id.innerHTML = '-';

    r.open('GET', 'dane-xml/' + Numer + '.xml', true);
    r.onreadystatechange = processResponse;
    r.send(null);

  }
}   
</script>
</head>
<body>

<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 1);">+</a>Canon EOS 20D</h3><div></div></div>

<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 2);">+</a>Canon EOS 30D</h3><div></div></div>



</body>

 

oraz dwa pliki xml

<?xml version="1.0" encoding="iso-8859-1"?>
<aparat>
    <producent>Canon</producent>
    <model>EOS 20D</model>
    <typ>DSLR</typ>
    <megapixel>8.2</megapixel>
    <lcd>1.8</lcd>
    <matryca>COMOS</matryca>
    
</aparat>

drugi identyczny


z gory dzieki za pomoc
 
0

poprawilem (znalazlem kod na stronie)

teraz sie ladnie wyswietla, ale po kliknieciu na rozwiniecia (uzycie ajax) nic sie niedzieje... dlaczego ?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">

  <head>

    <title>Ajax. Kurs od podstaw. Część pierwsza: Wprowadzenie. Przykład #4.3</title>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    

    <style type="text/css">

    body {

        font-family: Verdana, sans-serif;

        font-size: small;

    }

    h3 {

        font-size: 90%;

        margin: 0;

        padding: 0;

    }

    .tresc {

        width: 300px;

        border: 1px solid black;

        padding: 10px;

        background: #e8fff1;        

        margin: 10px;

    }

    .tresc div {

        display: none;

        padding: 5px;

        margin-left: 40px;

        font-size: 80%;        

    }

    .tresc a {

        width: 20px;

        font-family: "Courier New", monospace;

        text-decoration: none;

    }

    </style>

    

<script type="text/javascript">



function getXMLHttpRequest()

{

    var request = false;

    

    try {

        /*

	 * Przeglądarki: Firefox 2, Opera 9, IE 7

	 */

        request = new XMLHttpRequest();

    } catch(err1) {

        try {

            /*

             * Przeglądarka: IE 6

             */

            request = new ActiveXObject('Msxml2.XMLHTTP');

        } catch(err2) {

            try {

                /*

                 * Przeglądarka: IE 5

                 */

                request = new ActiveXObject('Microsoft.XMLHTTP');                

            } catch(err3) {

                request = false;

            }

        }

    }

    return request;

}    



var r;



r = getXMLHttpRequest();    





var opis= new Array(20);

opis[0]  = 'Producent';

opis[1]  = 'Model';

opis[2]  = 'Typ';

opis[3]  = 'MPx';

opis[4]  = 'LCD';

opis[5]  = 'Typ matrycy';

opis[6]  = 'Wymiary matrycy';

opis[7]  = 'Pamięć';

opis[8]  = 'Mocowanie obiektywu';

opis[9]  = 'Mnożnik ogniskowej';

opis[10] = 'Stabilizacja obrazu';

opis[11] = 'Migawka';

opis[12] = 'Czułość';

opis[13] = 'Autobracketing';

opis[14] = 'Podgląd głębi ostrości';

opis[15] = 'Balans bieli';

opis[16] = 'Zdjęcia seryjne';

opis[17] = 'Pole widzenia';

opis[18] = 'Korpus';

opis[19] = 'Baterie';

opis[20] = 'Cena';



var element;



function processResponse()

{

    if (r.readyState == 4) {

        if (r.status == 200) {

        

            var x = r.responseXML.getElementsByTagName('aparat')[0].childNodes;            



            var tmp = '';

            

            for (i = 2; i < x.length; i++) {

                tmp = tmp

		    + '<strong>' + opis[i] + ':</strong> '

		    + x[i].childNodes[0].nodeValue

		    + '<br />';

            }

            

            element.innerHTML = tmp;

        };

    }

}





function expandCollapse(Id, Numer)

{

    element = Id.parentNode.parentNode.childNodes[1];

    if (element.style.display == 'block') {

        element.style.display = 'none';        

        Id.innerHTML = '+';

    } else {

        element.style.display = 'block';                

        Id.innerHTML = '-';                

        

        r.open('GET', 'dane-xml/' + Numer + '.xml', true);

        r.onreadystatechange = processResponse;

        r.send(null);        

    }

}   



</script>



    

  </head>

<body>



<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 1);">+</a> Canon EOS 20D</h3><div></div></div>



<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 2);">+</a> Canon EOS 30D</h3><div></div></div>



<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 3);">+</a> Canon EOS 350D</h3><div></div></div>



<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 4);">+</a> Canon EOS-400</h3><div></div></div>



<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 5);">+</a> Fujsum Finepix S3 Pro</h3><div></div></div>



<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 6);">+</a> Nikon D200</h3><div></div></div>



<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 7);">+</a> Nikon D 40x</h3><div></div></div>



<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 8);">+</a> Nikon D80</h3><div></div></div>



<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 9);">+</a> Nikon D40</h3><div></div></div>



<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 10);">+</a> Olympus E-1</h3><div></div></div>



<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 11);">+</a> Olympus E-330</h3><div></div></div>



<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 12);">+</a> Olympus E-400</h3><div></div></div>



<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 13);">+</a> Olympus EOS 350D</h3><div></div></div>



<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 14);">+</a> Olympus E-510</h3><div></div></div>



<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 15);">+</a> Olympus E-300</h3><div></div></div>



<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 16);">+</a> Olympus E-410</h3><div></div></div>



<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 17);">+</a> Pentax K10D</h3><div></div></div>



<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 18);">+</a> PENTAX K100D/K11OD</h3><div></div></div>



<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 19);">+</a> Pentax K100D</h3><div></div></div>



<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 20);">+</a> Samsung GX-10</h3><div></div></div>



<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 21);">+</a> Sigma SD14</h3><div></div></div>



<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 22);">+</a> SONY A100</h3><div></div></div>











</body>

</html>

 
0

Geniuszem nie jestem, ale czy nie powinieneś dodawać jQuery o_O ?

0

kurcze, chce ruszyc z wiekszym prjektem, na bazie tego, a tu taki zonk, ze przykladu nie moge uruchomic... ;)

funkcja function expandCollapse(Id, Numer) dziala, bo + zamienia sie na -

jednak processtime nie powoduje zadnego efektu...

0

dobrze, pierwsze pytanie: jak wyglądają u Ciebie pliki z danymi? Według tego, powinieneś mieć dla każdego aparatu w katalogu dane-xml plik np.od 1.xml do 20.xml. Masz te pliki?

0

tak wyglada 1.xml z tego folderu

 
<?xml version="1.0" encoding="iso-8859-1"?>
<aparat>4
	<producent>Canon</producent>
	<model>EOS 20D</model>
	<typ>DSLR</typ>
	<megapixel>8.2</megapixel>
	<lcd>1.8</lcd>
	<matryca>COMOS</matryca>
	<wymiarMatrycy>22.5 X 15.0</wymiarMatrycy>
	<pamiec>CF</pamiec>
	<mocowanieObiektywu>Canon EF/EF-s</mocowanieObiektywu>
	<mnoznikOgniskowej>1.6</mnoznikOgniskowej>
	<stabilizacjaObrazu>-</stabilizacjaObrazu>
	<migawka>30 S-1/8000 s.B</migawka>
	<czulosc>100-3200 ISO</czulosc>
	<autobracketing>+</autobracketing>
	<podgladGlebi>+</podgladGlebi>
	<balansBieli>9</balansBieli>
	<zdjeciaSeryjne>5 kl./s</zdjeciaSeryjne>
	<poleWidzenia>95%</poleWidzenia>
	<korpus>Metal</korpus>
	<baterie>BP-511A</baterie>
	<cena>4269</cena>
</aparat>

macie jakis pomysl,bo przez swieta musze zrobic projekt (znacznie wiekszy niz to) a juz mam jeden dzien w plecy :D

0

Zainstaluj firebuga (http://getfirebug.com) i otwórz sobie konsole, popatrz na zakładkę sieć. Od biedy możesz odpalić po prostu konsolę JS (Ctrl+shift+J w firefoksie) i poszukać czy nie wyskakują jakieś błędy.

Mam nadzieję, że nie odpalasz pliku html przez dwuklik na ikonce, bo wtedy ajax nie ma szans działać :->

0

Po pierwsze, usunąłem niepotrzebne puste linie:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  <head>
    <title>Ajax. Kurs od podstaw. Część pierwsza: Wprowadzenie. Przykład #4.3</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style type="text/css">
    body {
        font-family: Verdana, sans-serif;
        font-size: small;
    }

    h3 {
        font-size: 90%;
        margin: 0;
        padding: 0;
    }
    .tresc {
        width: 300px;
        border: 1px solid black;
        padding: 10px;
        background: #e8fff1;
        margin: 10px;
    }

    .tresc div {
        display: none;
        padding: 5px;
        margin-left: 40px;
        font-size: 80%;
    }

    .tresc a {
        width: 20px;
        font-family: "Courier New", monospace;
        text-decoration: none;
    }
    </style>

<script type="text/javascript">
function getXMLHttpRequest()
{
var request = false;
try
	 {
        /*
         * Przeglądarki: Firefox 2, Opera 9, IE 7
         */
        request = new XMLHttpRequest();
    } catch(err1) {
        try {
            /*
             * Przeglądarka: IE 6
             */
            request = new ActiveXObject('Msxml2.XMLHTTP');

        } catch(err2) {
            try {
                /*
                 * Przeglądarka: IE 5
                 */
                request = new ActiveXObject('Microsoft.XMLHTTP');
            } catch(err3) {
                request = false;
            }
        }
    }
    return request;
}

var r;

r = getXMLHttpRequest();

var opis= new Array(20);

opis[0]  = 'Producent';
opis[1]  = 'Model';
opis[2]  = 'Typ';
opis[3]  = 'MPx';
opis[4]  = 'LCD';
opis[5]  = 'Typ matrycy';
opis[6]  = 'Wymiary matrycy';
opis[7]  = 'Pamięć';
opis[8]  = 'Mocowanie obiektywu';
opis[9]  = 'Mnożnik ogniskowej';
opis[10] = 'Stabilizacja obrazu';
opis[11] = 'Migawka';
opis[12] = 'Czułość';
opis[13] = 'Autobracketing';
opis[14] = 'Podgląd głębi ostrości';
opis[15] = 'Balans bieli';
opis[16] = 'Zdjęcia seryjne';
opis[17] = 'Pole widzenia';
opis[18] = 'Korpus';
opis[19] = 'Baterie';
opis[20] = 'Cena';

var element;

function processResponse()
{
    if (r.readyState == 4) {
        if (r.status == 200) {
            var x = r.responseXML.getElementsByTagName('aparat')[0].childNodes;
            var tmp = '';
            for (i = 2; i < x.length; i++) {
                tmp = tmp
                    + '<strong>' + opis[i] + ':</strong> '
                    + x[i].childNodes[0].nodeValue
                    + '<br />';
            }

            element.innerHTML = tmp;
        };
    }
}

function expandCollapse(Id, Numer)
{
    element = Id.parentNode.parentNode.childNodes[1];
    if (element.style.display == 'block') {
        element.style.display = 'none';
        Id.innerHTML = '+';
    } else {
        element.style.display = 'block';
        Id.innerHTML = '-';
        r.open('GET', 'dane-xml/' + Numer + '.xml', true);
        r.onreadystatechange = processResponse;
        r.send(null);
    }
}
</script>
</head>
<body>
<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 1);">+</a> Canon EOS 20D</h3><div></div></div>
<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 2);">+</a> Canon EOS 30D</h3><div></div></div>
<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 3);">+</a> Canon EOS 350D</h3><div></div></div>
<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 4);">+</a> Canon EOS-400</h3><div></div></div>
<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 5);">+</a> Fujsum Finepix S3 Pro</h3><div></div></div>
<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 6);">+</a> Nikon D200</h3><div></div></div>
<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 7);">+</a> Nikon D 40x</h3><div></div></div>
<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 8);">+</a> Nikon D80</h3><div></div></div>
<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 9);">+</a> Nikon D40</h3><div></div></div>
<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 10);">+</a> Olympus E-1</h3><div></div></div>
<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 11);">+</a> Olympus E-330</h3><div></div></div>
<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 12);">+</a> Olympus E-400</h3><div></div></div>
<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 13);">+</a> Olympus EOS 350D</h3><div></div></div>
<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 14);">+</a> Olympus E-510</h3><div></div></div>
<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 15);">+</a> Olympus E-300</h3><div></div></div>
<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 16);">+</a> Olympus E-410</h3><div></div></div>
<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 17);">+</a> Pentax K10D</h3><div></div></div>
<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 18);">+</a> PENTAX K100D/K11OD</h3><div></div></div>
<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 19);">+</a> Pentax K100D</h3><div></div></div>
<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 20);">+</a> Samsung GX-10</h3><div></div></div>
<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 21);">+</a> Sigma SD14</h3><div></div></div>
<div class="tresc"><h3><a href="#" onclick="expandCollapse(this, 22);">+</a> SONY A100</h3><div></div></div>
</body>
</html>

Po drugie: u mnie wszystko działa tak jak powinno :P

nav napisał(a)

Mam nadzieję, że nie odpalasz pliku html przez dwuklik na ikonce, bo wtedy ajax nie ma szans działać :->

Nie możesz bawić się ajax'em w ten sposób, że masz na dysku ten plik i po prostu na niego klikasz. To nie przejdzie.

Wytłumacz sobie to w ten sposób, że zmienna request to odpowiedź serwera, więc potrzebny jest serwer do obsłużenia ajax'a. :)

Cały sens powyższego kodu to: js wysyła do serwera żądanie dostarczenia danych, serwer odpowiada przekazując te dane, po czym js je wyświetla. Czyli jak widzisz bez serwera się tu nie obejdzie. Zainstaluj sobie jakikolwiek serwer, np. xampp, umieść te pliki w katalogu na stronę i będzie pięknie działać. Będziesz się do tej strony wtedy odwoływał wywołując ją w przeglądarce np. http://localhost/strona.html

0

mialem apache, ale przeinstalowalem i teraz jest juz ok

tylko teraz mam niezle czary,

edytuje sobie te xml, a apache wyswietla mi caly czas stare dane :D

0

var x = r.responseXML.getElementsByTagName(' ??? ')[0].childNodes;

tam gdzie pytajniki ma byc tekst z pierwszego znacznika <... > z pliku xml

no to jakim cudem gdy zmienie w xmlu wszystkie znaczniki i tu zmodyfikujen ta linijke, to nic sie nie wyswietla ?

0

Przeglądarka zapisuje sobie pobrane dane w pamięci podręcznej, żeby za każdym razem nie marnować czasu na pobieranie tego, co według niej już pobrała. Powinno pomóc ctrl+R, ew. przeglądarki mają gdzieś w swoim menu pozycję "wyczyść cache". Jak widzę w firefox'ie jest to w menu narzędzia->clear cache. Ogólnie, zainstaluj sobie w nim dwie rzeczy: firebug i pasek web developer - niezbędne do pracy :)

0

ok, jakos to ogarnalem i porzerabiam powoli

a innerHtml zastepuje zawartosc elementu nowym

czy istnieje cos, co dopisuje do elementu (nie usuwa go) ?

0

a czemu nie:

element.innerHTML = element.innerHTML + '<br />to co mam dodać';

1 użytkowników online, w tym zalogowanych: 0, gości: 1