Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pocetnicko pitanje oko XML

[es] :: Javascript i AJAX :: Pocetnicko pitanje oko XML

[ Pregleda: 1250 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

iizuzetan

Član broj: 186478
Poruke: 375
85.222.179.*



+16 Profil

icon Pocetnicko pitanje oko XML14.07.2009. u 17:22 - pre 180 meseci
Hocu da vrednost iz XMLHttpRequest objekta prebacim u JavaScript promenjljivu ali nikako da uspem pa zato ako bi mogo neko da mi pomogne. Na primer sledeci kod radi:

Code:

<html><head><title>Ajax primer sa XML ispisom</title>
<script type="text/javascript">
function ajaxFunction() {
     if (window.XMLHttpRequest)  { xmlhttp=new XMLHttpRequest();}
     else if (window.ActiveXObject)  { xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}
     else  {   alert("Your browser does not support XMLHTTP!"); }
     function xmlhttp.onreadystatechange(){
           if(xmlhttp.readyState==4) {
               var vremeTekuce =  xmlhttp.responseXML.getElementsByTagName("vremesada")[0];
               document.getElementById('vremePrikaz').innerHTML = vremeTekuce.childNodes[0].nodeValue;
           }
     }
     xmlhttp.open("GET","XMLpisiVreme.php",true);
     xmlhttp.send(null);
}
</script>
</head><body onLoad="ajaxFunction()">
<div id="vremePrikaz"></div>
</body></html>


A sledeci kod ne radi:

Code:

<html><head><title>Ajax primer sa XML ispisom</title>
<script type="text/javascript">
function ajaxFunction() {
     if (window.XMLHttpRequest)  { xmlhttp=new XMLHttpRequest();}
     else if (window.ActiveXObject)  { xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}
     else  {   alert("Your browser does not support XMLHTTP!"); }
     function xmlhttp.onreadystatechange(){
           if(xmlhttp.readyState==4) {
               var vremeTekuce =  xmlhttp.responseXML.getElementsByTagName("vremesada")[0];
               a = vremeTekuce.childNodes[0].nodeValue;
           }
     }
     xmlhttp.open("GET","XMLpisiVreme.php",true);
     xmlhttp.send(null);
return a
}
</script>
</head><body>
<script>
document.write (ajaxFunction());
</script>
</body></html>


Gde je greska i kako da vrednost iz XMLHttpRequest objekta prebacim u JavaScript promenjljivu na primer var a a ne tamo u vrednost nekog elementa forme ili u vrednost nekog elementa id?????? Pomagajte ako znate :)
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: Pocetnicko pitanje oko XML14.07.2009. u 19:36 - pre 180 meseci
imas gresku u logici koda, koja je najverovatnije razlog tvog pogresnog razumevanja XMLHttpRequest objekta i callback funkcija.

evo prostiji primer (bez ajaxa):
Code:

function test(){
   var a = 1;
   setTimeout(function(){
        a = 2;
   }, 500);
   return a;
}

alert(test());


rezultat izvrsavanja ovog koda ce biti alert box u kome ce pisati 1 a ne 2, kao sto ti ocekujes (zakljucujem iz tvog koda da to ocekujes).

dakle, ono sto se desava kada se pozove test funkcija je:
1 - definise se lokalna promenljiva a kojoj se dodeli 1 kao inicijalna vrednost
2 - definise se nova (anonimna) funkcija koja u svom bodyju menja a promenljivu (lokalnu promenljivu funkcije test)
3 - poziva se setTimeout fja kojoj se prosledjuju anonimna funkcija i 500 (interval)
4 - kao rezultat funkcije test se vraca vrednost promenljive a, koja je u ovom trenutku 1
5 - nakon pola sekunde (500ms) izvrsice se ona anonimna fja i setovace promenljivu a na 2, ali kako je funkcija test vec zavrsila svoj zivot ovo nema nikakvog efekta na rezultat koji je funkcija test vec vratila

e isto to se desava i u tvom kodu, samo sto se ne koristi timeout vec ajax upit koji se ustvari ponasa isto kao i tajmer.

elem, evo kako bih ja napisao to sto tebi treba:
Code:

var xhr = null;

if (window.XMLHttpRequest)  xhr = new XMLHttpRequest();
else if (window.ActiveXObject)  xhr = new ActiveXObject("Microsoft.XMLHTTP");
else  { alert("Your browser does not support XMLHTTP!"); }

function ajaxFunction(callback) {
    if (!xhr) return;
    xhr.onreadystatechange = function() {
      if (xhr.readyState == 4) {
         callback(xhr.responseXML.getElementsByTagName("vremesada")[0].childNodes[0].nodeValue); // mada bi ovde trebalo proveriti da li je vracen validan xml...
      }
    }
    xhr.open("GET","XMLpisiVreme.php",true);
    xhr.send(null);
}

...

ajaxFunction(function(vremesada){
  alert(vremesada);
});


mada bih ja pre koristio neki ajax framework, kao sto je recimo jQuery
 
Odgovor na temu

iizuzetan

Član broj: 186478
Poruke: 375
85.222.179.*



+16 Profil

icon Re: Pocetnicko pitanje oko XML14.07.2009. u 20:18 - pre 180 meseci
Hvala na dobroj volji i zelji da pomognes ali meni i dalje nije nista jasno. Ja sam postavio jednostavno pitanje kako da podatak koji se prenese sa servera stavim u JavaScript PROMENJLJIVU var a a ne u vrednost nekog elementa id ili u neku vrednost elementa forme. Da skratim, u onaj skript koji po tebi bi trebalo da odradi poso NIGDE NEMA JAVASCRIPT PROMENJLJIVE a !?

Elem ajde da preskocim sve vezano za AJAX i da kazem sta konkretno hocu. Znaci imam promenjljivu $tekst u php fajlu XMLpisiVreme.php na serveru i zelim da vrednost te promenjljive prenesem kod klijenta u JavaScript promenjljivu var a !! A evo kako izgleda taj php fajl pod nazivom XMLpisiVreme.php

Code:

<?
include('baza.php');
     $q=@mysql_query('SELECT poruka, nik FROM chat');
     $a=0;
     while ($redak=@mysql_fetch_assoc($q)){
          $a=$a+1;
          $korisnici[$a]['nnik']=$redak['nik'];
          $korisnici[$a]['pporuka']=$redak['poruka'];
     }
     $tekst='';
     for ($i=1; $i<=$a; $i++){
          $tekst= $tekst.$korisnici[$i]['nnik']." : ".$korisnici[$i]['pporuka'];
     }
header('Content-Type: text/xml');
echo "<?xml version=\"1.0\" ?><sat><vremesada>" .$tekst."</vremesada></sat>";
?>


[Ovu poruku je menjao iizuzetan dana 14.07.2009. u 21:39 GMT+1]
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: Pocetnicko pitanje oko XML14.07.2009. u 21:47 - pre 180 meseci
procitaj jos jednom moju predhodnu poruku (ali se potrudi da razumes sta sam pokusao da ti objasnim), a sto se tice te promenljive a:
Code:

ajaxFunction(function(vremesada){
  var a = vremesada;

  // sad imas tu vrednost u promenljivoj a

});


ili jednostavno:
Code:

ajaxFunction(function(a){

  // sad imas tu vrednost u promenljivoj a

});

 
Odgovor na temu

iizuzetan

Član broj: 186478
Poruke: 375
85.222.179.*



+16 Profil

icon Re: Pocetnicko pitanje oko XML14.07.2009. u 22:53 - pre 180 meseci
Pravio sam razne kombinacije ovoga sto si ti predlozio i nisam mogao da izvan xhr.onreadystatechange funkcije izvucem JavaScript promenjljivu var a. Odnosno jedini nacin do kog sam ja doso je ovaj:

Code:

<script type="text/javascript">
if(navigator.appName == "Microsoft Internet Explorer") http = new ActiveXObject("Microsoft.XMLHTTP");
else http = new XMLHttpRequest();

function validate() {
  http.abort();
  http.open("GET", "zzz1.php", true);
  http.send(null);
}

function http.onreadystatechange() {
    if(http.readyState == 4) {
      a=http.responseText;
      document.write(a);
    }
}

validate();
</script>


I nema veze, i ovako moze da mi zavrsi poso vezano za JavaScript promenjljivu var a.

E sad da ne bih otvarao novu temu da postavim jos jedno pitanje posto sam naisao na jos jedan problem. Postavicu skripte prvo.

fajl zzz2.php
Code:

<script type="text/javascript">
if(navigator.appName == "Microsoft Internet Explorer") http = new ActiveXObject("Microsoft.XMLHTTP");
else http = new XMLHttpRequest();

function validate() {
  http.abort();
  http.open("GET", "zzz1.php", true);
  http.send(null);
}

function http.onreadystatechange() {
    if(http.readyState == 4) {
      a=http.responseText;
      document.write(a);
    }
}

validate();
setTimeout ("validate()",1000);
</script>


fajl zzz1.php
Code:

<?php
echo rand(2,50);
?>


Znaci hocu da mi se u intervalima od 1 sekunde sa servera ucitava na klijentsku stranu po jedan slucajni broj. E sad, problem je u tome sto mi se ucita samo jednom i vise nece. Kako da postavim JavaScript funkciju setTimeout??? Da li sam nesto pogresno napisao u njoj ili drugacije nekako treba, ili cak i druga funkija ili kako?

[Ovu poruku je menjao iizuzetan dana 15.07.2009. u 03:52 GMT+1]
 
Odgovor na temu

[es] :: Javascript i AJAX :: Pocetnicko pitanje oko XML

[ Pregleda: 1250 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.