Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ajax - pobieranie pliku tekstowego i wyświetlanie w DIV
Forum PHP.pl > Forum > XML, AJAX
bartisz
witam
zaczynam bawić się w AJAX. Tak więc bardzo proszę o pomoc przy kodzie:

Kod
<html>
<head>
<script type="text/javascript">
var xmlhttp;
xmlhttp=new XMLHttpRequest();
function PobierzDane(zrodlo, cel){
if(xmlhttp)
{
     var cel = document.getElementById(cel);
     xmlhttp.open("GET", zrodlo);

     xmlhttp.onreadystatechange=function()
     {
     if(xmlhttp.readyState==4){
     cel.innerHTML=xmlhttp.responseText;
    
     }
    
     }
}
xmlhttp.send(null);
}


</script>
</head>
<body>
<form name="forma" method="get"><input type="button" value="pobierz zawartosc" onClick="PobierzDane('http://adres.pl/plik.txt', 'div');"></form>
<div id="div">   </div>
</body>
</html>

Po wywołaniu nie wyświetla się nic, wyłączałem adblock, kaspersky (moduł antibanner). Tak więc problem jest ewidentnie w kodzie.
Dodam, że plik tekstowy, który chcę pobrać znajduje się na serwerze yoyo. Debugger (FF) nie pokazuje żadnych błędów.

z góry dziękuję winksmiley.jpg
pozdrawiam
blooregard
Cytat
onClick="PobierzDane('http://adres.pl/plik.txt', 'div');

Chyba raczej nie pobierzesz przy pomocy JS czegoś spod innej domeny.
bartisz
wiadomo winksmiley.jpg
zmieniłem to przed wrzuceniem na forum, bo w pliku (tym na serwerze yoyo) znajdują dla mnie jednak ważne dane
blooregard
No właśnie.

Bo ogólnie skrypt działa. Sprawdzałem lokalnie u siebie i w divie pokazuje się zawartość pliku tekstowego podanego jako argument f-cji PobierzDane.
bartisz
Cytat(blooregard @ 17.11.2009, 18:12:17 ) *
No właśnie.

Bo ogólnie skrypt działa. Sprawdzałem lokalnie u siebie i w divie pokazuje się zawartość pliku tekstowego podanego jako argument f-cji PobierzDane.


znalazłem odpowiedź
skrypt wywoływałem na moim komputerze. A dane nie mogą być pobierane z innej domeny winksmiley.jpg
wrzuciłem ten skrypt na serwer i ładnie działa

pozdrawiam smile.gif
esiek
bylo wiele razy mówione ze JS działa tylko lokalnie [w obrębie serwera na którym są pliki] i nie działa zdalnie [nie pobierze informacji z innego serwera]
#luq
Trochę wprowadzacie w błąd.

Sam obiekt XHR ma możliwość pobierania danych z innego serwera/domeny to przeglądarki implementują zabezpieczenie zwane Same Origin Policy i to przeglądarka nie pozwala na pobieranie danych z innych domen, poza tym oczywiście tą opcję można wyłączyć, np. na Chromie, uruchamiany przeglądarkę z opcją
Kod
--disable-web-security

Z programistycznego punktu widzenia problem rozwiązuję się budując bridge. Skrypt PHP na naszej stronie pobiera dane z innego serwera, a my komunikujemy się z tym naszym skryptem przez obiekt XHR.
krzysieqq
Witam przepraszam że odkopuje ten temat ale nie chciałem zakładać nowego.
Skrypt działa mi poprawie ale gdy używam walidatora na stronie w3.org wywala mi 3 błędy o następującej treści:
Cytat
# Line 35, Column 36: required attribute "ACTION" not specified

<form name="forma" method="get"><input type="button" value="pobierz zawartos



The attribute given above is required for an element that you've used, but you have omitted it. For instance, in most HTML and XHTML document types the "type" attribute is required on the "script" element and the "alt" attribute is required for the "img" element.

Typical values for type are type="text/css" for <style> and type="text/javascript" for <script>.
# Error Line 35, Column 125: document type does not allow element "INPUT" here; missing one of "P", "H1", "H2", "H3", "H4", "H5", "H6", "PRE", "DIV", "ADDRESS" start-tag

…ck="PobierzDane('test.txt', 'div');"></form>



The mentioned element is not allowed to appear in the context in which you've placed it; the other mentioned elements are the only ones that are both allowed there and can contain the element mentioned. This might mean that you need a containing element, or possibly that you've forgotten to close a previous element.

One possible cause for this message is that you have attempted to put a block-level element (such as "<p>" or "<table>") inside an inline element (such as "<a>", "<span>", or "<font>").
# Error Line 35, Column 132: end tag for "FORM" which is not finished

…ierzDane('test.txt', 'div');"></form>



Most likely, you nested tags and closed them in the wrong order. For example <p><em>...</p> is not acceptable, as <em> must be closed before <p>. Acceptable nesting is: <p><em>...</em></p>

Another possibility is that you used an element which requires a child element that you did not include. Hence the parent element is "not finished", not complete. For instance, in HTML the <head> element must contain a <title> child element, lists (ul, ol, dl) require list items (li, or dt, dd), and so on.


da się coś z tym zrobić? Bo ja nie mogę dojść o co chodzi.
cim
Witam,

ad. 1. do tagu <form> dodaj parametr: action="#" i po krzyku.
ad. 2. według standardów INPUT`y nie powinny być same sobie tylko zawarte w: "P", "H1", "H2", "H3", "H4", "H5", "H6", "PRE", "DIV", "ADDRESS".
ad. 3. przed </form> powinieneś zamknąć jakiś inny tag, który zaczyna się po <form>, np. zamiast takiego: <form><div>.... </form></div> takie: <form><div>...</div></form>

Pozdrawiam
ActivePlayer
a teraz jak już przedostałeś się przez hard kodowanie ajaxa, zapraszamy do zapoznania się z jQuery, prototype, dojo, albo innym frameworkiem, który cały trudny do napisania stuff zrobi za Ciebie.
DirectPL
Witam.
Powyższy skrypt działa również jeśli chcę wczytać stronę z tej samej domeny.

Teraz mianowicie chodzi mi to, aby z tej wczytanej strony skopiować zawartość DIV'a o identyfikatorze "rightcol" do div'a którego wskażę na stronie z której wywołałem polecenie JS.

Przerobiłem trochę skrypt:
  1. var xmlhttp;
  2. xmlhttp = new XMLHttpRequest();
  3. function ShowProduct(link){
  4. if(xmlhttp)
  5. {
  6. var place = document.getElementById("rightcol");
  7. xmlhttp.open("GET", link);
  8.  
  9. xmlhttp.onreadystatechange=function()
  10. {
  11. if(xmlhttp.readyState==4)
  12. {
  13. var source;
  14. source = xmlhttp.responseText;
  15. place.innerHTML = source.getElementById("produkt");
  16. }
  17. }
  18. }
  19. xmlhttp.send(null);
  20. }


Proszę o pomoc!
Direct
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.