[AJAX]Pobieranie zmiennej

Witam!

Czy jest możliwość pobierania wartości zmiennej (będzie to text) z php i wyświetlenie go na stronie poprzez ajax?

Chodzi o to że zmienna w php przy wykonywaniu kodu będzie zmieniać swoją wartość i chce aby na bieżąco np. co jedną sekundę ajax pobierał tą zmienną i ją wyświetlał.

Pozdrawiam.

Do tego on służy (ale zmienna jako co ? zawartość tabeli/pliku czy jak ?).

Wyślij zapytanie do pliku i zwróć odpowiedź na zapytanie jako tekst, przy pomocy js podmień zawartość konkretnego boxu na stronie. Wszystko wykonuj co 1s.

Ta zmienna będzie wyglądała mniej więcej tak:

Skjorzystaj i poczytaj o Mootools lub jQuery, spróbuj coś napisać.

  1. http://www.google.pl/search?hl=pl&client=firefox-a&hs=FWN&rls=org.mozilla%3Apl%3Aofficial&q=mootools+ajax+demos&lr=&aq=f&aqi=&aql=&oq=&gs_rfai=

  2. http://www.google.pl/search?hl=pl&client=firefox-a&hs=rq2&rls=org.mozilla%3Apl%3Aofficial&q=jquery+ajax+demos&lr=&aq=f&aqi=&aql=&oq=&gs_rfai=

Nie łącz w żadnym przypadku tych 2 bibliotek - nie mogą pracować jednocześnie.

Jeżeli bym umiał cokolwiek z ajaxa to bym próbował poprzerabiać, tak jak to robiłem na początkach z php, ale teraz jestem bezradny, podrzuciłeś mi jakieś linki, przeglądałem przykłady z tego pierwszego, i nic z php tam robione nie jest.

Nie podawajcie mi zaawansowanych bibliotek bo do czegoś takiego one nie są potrzebne, chcę tylko na podstawie “odświeżania” i pobierania zmiennych z php wyświetlić tą zmienną. NIC WIĘCEJ.

Proszę o zrozumienie.

Powiedz o jakich procesach myślisz bo wyświetlanie postępów w operacjach na serwerze to nie jest prosta sprawa. Ajax służy do pobierania pewnych elementów strony bez jej przeładowywania a pisząc o galerii to takimi danymi mogą być zdjęcia, komentarze lub jeszcze inne mniej ważne dane. Z tym, że takie dane wczytywać się będą dość szybko więc wystarczył by komunikat o wczytywaniu pewnych danych. Więc powiedz dokładnie o co ci chodzi i o jakich operacjach myślisz.

Mi osobiście ciężko było przejść z php na js(czyli też ajax) bo to wymaga zmiany toku myślenia:)

Upload, rozpakowywanie, tworzenie miniaturek, pomniejszanie dużych zdjęć.

Poza uploadem to nie powinno długo trwać i jeżeli chodzi o postęp wysyłania to js takiej możliwości chyba nie ma. Najlepiej jak byś w ogóle odpuścił Ajax jeżeli go nie umiesz. Ale jeżeli musi być do podam ci link do skryptu i powiem jak zmodyfikować skrypt php żeby na stronie wyświetlał się komunikat po zakończeniu operacji.

Załóżmy że jest 200 zdjęć, więc pomniejszanie ich i tworzenie miniaturek na pewno by trochę zajęło.

Jest taka możliwość z połączeniem php, ale nie zależy mi na nim, przynajmniej teraz.

Prosiłbym Cię o pokazanie tego skryptu może to akurat będzie to o co mi chodzi, a jak nie to będę dalej kombinował (albo i nie :P), przynajmniej będę miał jakiś trop.

Pozdrawiam.

var ajax = 

{

	"start" : function ()

	{

	var onprogress = false;

  var wersjeMSXML = new Array(

    "MSXML2.XMLHTTP.6.0",

    "MSXML2.XMLHTTP.5.0",

    "MSXML2.XMLHTTP.4.0",

    "MSXML2.XMLHTTP.3.0",

    "MSXML2.XMLHTTP",

    "Microsoft.XMLHTTP"

  );

  try

	{		

 		return new XMLHttpRequest();

  }

  catch(e)

	{

	alert('catch');

   	for (var indeks in wersjeMSXML)

	 	{

  		try

			{

   		  return new ActiveXObject(wersjeMSXML[indeks]);

   		}

   	  catch(e)

			{

  	  }

 		}

 		return null;

 	}

	},


	"get" : function (url)

	{

  var XMLHttpRequestObject = ajax.start();

  if(XMLHttpRequestObject){

    XMLHttpRequestObject.open("GET", url);

    XMLHttpRequestObject.onreadystatechange = function()

    {

      if (XMLHttpRequestObject.readyState == 4){

        if(XMLHttpRequestObject.status == 200){

          var responseXML = XMLHttpRequestObject.responseXML;

          var responseText = XMLHttpRequestObject.responseText;

          ajax.onComplete(responseText, responseXML);

        }

        delete XMLHttpRequestObject;

        XMLHttpRequestObject = null;

        ajax.onEnd();

      }

    }

    XMLHttpRequestObject.send(null);

  }

	},


	"post" : function (url, params)

	{

  var XMLHttpRequestObject = ajax.start();

  if(XMLHttpRequestObject){

    XMLHttpRequestObject.open("POST", url);

    XMLHttpRequestObject.setRequestHeader(

      'Content-Type', 'application/x-www-form-urlencoded');

    XMLHttpRequestObject.onreadystatechange = function()

    {

      if (XMLHttpRequestObject.readyState == 4){

        if(XMLHttpRequestObject.status == 200){

          var responseXML = XMLHttpRequestObject.responseXML;

          var responseText = XMLHttpRequestObject.responseText;

          ajax.onComplete(responseText, responseXML);

        }

        delete XMLHttpRequestObject;

        ajax.onEnd();

      }

    }

    XMLHttpRequestObject.send(params);

  }

	},


	"onComplete" : function (responseText, responseXML)

	{

	document.getElementById('wynik').innerHTML = responseText;

	},


	"onEnd" : function ()

	{

	onprogess = true;

	}

}

To dajesz do jakiegoś osobnego pliku z rozszerzeniem .js i w wklejasz

Następnie w kodzie strony musisz dodać przycisk do wysyłania danych:

clickerty click

Gdzie url to link do pliku php a params jak z metodą get np: zmienna1=cos1&zmienna2=cos2

Tak więc dodaj na stronie testowy div z id=‘wynik’.

Zrób prosty plik php generujący kod typu “udało się” i wstaw jego url do przycisku. Jak wszystko ci zadziała to pójdziemy dalej.

Dziś nie mam już czasu ale jutro wrócę do domu to dopisze jakieś skrypty.

Dodane 13.04.2010 (Wt) 14:08

Dobra jedziemy dalej z tym, że ajaxem jako takim wysyłać plików nie można. Ale znalazłem na to radę http://funkcje.net/view/2/10/4233/index.html Jest to wysyłanie pliku poprzez php z tym ,że przy użyciu iframe dlatego strona nie zostanie przeładowana(przynajmniej tak wykminiłem). I gdy plik zostanie przetworzony w iframe pojawia się samo wywołanie kodu js mającego poinformować przeglądarkę o zakończeniu wysyłania i dzięki temu znika pasek wysyłania.

Musze trochę pomyśleć nad kodem więc wyśle ci plik z gotowym wysyłaniem pliku na podstawie tego dema na stronie. Z tym że jadę teraz na badania i wrócę za jakieś 2h.

Dzięki wielkie za zainteresowanie.

Pobrałem ten kod i tak się właśnie zastanawiam jak to zrobić.

No bo w php zmienna $result przypiszę wartość 1 dopiero gdy php zakończy całą prace tj. upload plików. I to działa.

Ale jak w jednym pliku będzie operacja po operacji? Tzn. Będzie upload, potem wypakowywanie, potem zmniejszanie, to to nie osiągnie oczekiwanego efektu, bo wszystkie zmienne (po uploadowaniu $result=1, po zmniejszaniu $result=2 etc.) zostaną “przekazane” dopiero po skończeniu pracy przez php?!

A ja chcę żeby te zmienne były pobierane “w locie”.

Jeśli się mylę (oby) to przepraszam.

Nic się nie bój już ci taki kod napisze:)

Heh, jeszcze myślałem nad takim czymś że postępy zapisywane by były w pliku tekstowym a ajax by je odczytywał.

Dzięki tobie odkryłem alternatywę dla ajaxa:) Nie wiem natomiast o co ci teraz chodzi. PHP modyfikuje plik tekstowy a ramka na stronie co 1s wczytuje zawartość tego pliku… Nie czaje o co chodzi.