Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odświeżanie div zamiast iframe
Forum PHP.pl > Forum > XML, AJAX
Malinaa
Witam,
sie macie winksmiley.jpg

Chciałbym rozwiązać taki problem:

mam na stronie iframe w którym jest sonda i wszystko byłoby ok, tylko no właśnie sonada jest w iframe.

Jak zrobić div'a, który będzie działał jak iframe, będzie się odświeżał bez przeładowania całej strony (po kliknięciu submit).

IFRAME: <iframe src="elementy/sonda/sonda.php" width="170" height="200" scrolling="no" frameborder="0"></iframe>

DIV: <div id="div_iframe"><div> questionmark.gif?

Gdyby nie możliwość głosowania odświeżane div (iframe) nie byłoby potrzebne, wystarczyłoby tylko include("elementy/sonda/sonda.php");
wewnątrz div'a, ale można, ba nawet trzeba głosować i dlatego musi być odświeżany div (iframe działa, ale nie spełnia oczekiwań).

Kłopotliwe szczegóły na które trzeba zwrócić uwagę:

w pliku sonda.php znajduję się przycisk formularza <input type="submit"> i właśnie w tym cały problem, aby po wybraniu opcji głosowania w sondzie i kliknięciu input SUBMIT (Głosuj) przeładował się tylko sam DIV, w którym powinna być sonda, a nie cała strona.

Jak to zrobić, bardzo proszę o pomoc.
ces
piszesz w dziale ajax a w podanym przykladzie nie wykorzystales ajaxa a zamiast iframe mozesz np tak

$.ajax({
url: 'elementy/sonda/sonda.php',
success: function(data) {
$('.nazwa_diva').html(data);
}
});

przy uzyciu jquery
Malinaa
Witam,
ajax, jquery znam tyle o ile, ale myślę że w ajax'ie można to zrobić, dla tego piszę tutaj.

Wpisałem coś takiego j.w. w kod strony z nadzieją że zadziała,

<script type="text/javascript">
$.ajax ({
url: 'elementy/sonda/sonda.php',
success: function(data) {
$('.nazwa_diva').html(data);
}
});
</script>

nie działa, albo nie wiem jak zastosować?
chomiczek
@Malina musisz zaimplementować bibliotekę jquery wcześniej, oraz oczywiście przeedytować linijkę url.
jeżeli Twój div ma jakieś ID to powinno to wyglądać tak:
Kod
$('#nazwa_diva').html(data);
Malinaa
Sorry, I don't understand?

Można jaśniej,
jak zrobić takie odświeżanie w divie na stronie zamiast iframe?

Czy ktoś wie więcej?

Nie znalazłem informacji jak zrobić takie odświeżanie (js, ajax, jquery) questionmark.gif?

Może nie opisałem problemu jak trzeba?

Jest taka strona , na której jest sonda (na podstawie sondaży).
Ta sonda jest w iframe src="elementy/sonda/sonda.php", chciałbym aby zrobić ją w divie (src=?).
Tak, aby po kliknięciu w button (głosuj) nie otwierało (odświeżało) całej strony, tylko boksa z sondą.

Iframe dziła tutaj jak trzeba, tyle tylko że jest to iframe, a chciałbym taki oświeżany div.

Inna rzecz, którą chciałbym w ten sposób rozwiązać:
W iframe szerokość i wysokość jest stała, może w ten sposób wysokość boxa zmieniałby się zależnie od zawartości po odświeżeniu diva.

Jeśli ktoś byłby tak miły.
Dziękuje za pomoc.

Mam coś takiego

  1. <script type="text/javascript" language="JavaScript">
  2. <!--
  3. var object = false;
  4.  
  5. if (window.XMLHttpRequest) object = new XMLHttpRequest();
  6. else if (window.ActiveXObject) object = new ActiveXObject("Microsoft.XMLHTTP");
  7.  
  8. function getData(dataSource, divID) {
  9. object.onreadystatechange = function() {
  10. if (object.readyState == 4) document.getElementById(divID).innerHTML=object.responseText;
  11. }
  12. object.open("GET",dataSource,true);
  13. object.send(null);
  14. }
  15.  
  16. function odswiez() {
  17. getData('test_v3.php?ile=1','idSonda');
  18. }
  19. // -->


  1. <input type="submit" onclick="odswiez()" value="Odśwież">
  2. <div id="idSonda"></div>
  3. <script language="javascript">
  4. <!--
  5. odswiez();
  6. // -->


Div w jakiś sposób jest odświeżany jeśli w funkcji odswiez() nazwa pliku test_v3.php jest nie prawidłowa (tzn. kiedy plik nie istnieje).
Jeśli podam prawodłową ścieżkę i nazwę pliku nie odświeża.

Co jest tutaj nie tak?

I jak zrobić, aby <input type="submit" onclick="odswiez()" value="Odśwież"> znajdował się w pliku test_v3.php wewnątrz diva?

Tak, aby w kodzie html bylo tylko <div id="idSonda">Zawartość strony test_v3.php</div> po kliknięciu w test_v3.php przycisku <input> odświeżyło sondę.

Nie wiem jak to napisać, ba nie wiem jak pytać.

Zapytam wprost. Czy jest tu jakiś mądrala?
chomiczek
na początku strony podłącz sobie bibliotekę jQuery.. możesz to zrobić tak, dodając 2 poniższe linijki w sekcji head:

Kod
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("jquery", "1.4.2");</script>


a następnie masz taki kod:
Kod
<script type="text/javascript">
function odswiez() {
  $("#idSonda").load("elementy/sonda/sonda.php"); //spowoduje wpisanie zawartości pliku z podanej lokalizacji do div idSonda
}
</script>
<div id="idSonda"></div>
<script>
  $("#idSonda").load("elementy/sonda/sonda.php");
</script>
<input type="submit" onclick="odswiez()" value="Odśwież">


czasem może się okazać, że jednak load() z funkcji odswiez() nie działa tak jak powinnien to ja wtedy używam $.ajax
Kod
$.ajax({
        type: "POST",
        url: "elementy/sonda/sonda.php"
        success: function(msg){
            $("#idSonda").html(msg); //spowoduje wpisanie do diva zwróconej zawartości pliku
        }
     });
    });


pisane z palca więc jakieś drobne błędy mogą być.

EDT: zmieniłby jeszcze onclick z subimit, z uwagi na to, że trzeba wyłączyć normalną akcję (submit).. onclick możesz podpiąć do czegokolwiek..
Malinaa
Na ten czas, jest tak

  1. <script type="text/javascript">
  2. function odswiez() {
  3. $.ajax ({
  4. type: "POST",
  5. url: "elementy/sonda/sonda.php",
  6. success: function(data) {
  7. $("#idSonda").html(data);
  8. }
  9. });
  10.  
  11. //$("#idSonda").load("elementy/sonda/sonda.php");
  12.  
  13. document.formSonda.submit(); // Co Tutaj questionmark.gif
  14. }
  15.  
  16. <div id="idSonda"></div>
  17. $("#idSonda").load("elementy/sonda/sonda.php");


W pliku sonda.php umieściłem input type button zamiast submit. Czy o tym pisałeś, aby zmienić?

sonda.php
<form action="$_SERVER['PHP_SELF']" method="post" name="formSonda">
<input type="button" value="Odśwież" onclick="odswiez()">
</form>

Uwagi: Ścieżka do pliku: elementy/sonda/sonda.php . Sonda wyświetlana jest na stronie index.php .

Problem: co dodać w funkcji odswiez() lub gdzie indziej, aby po kliknięciu button Odśwież, który jest w pliku sonda.php wyświetlanym w divie na stronie index.php prezkazywane były niezbędne zmienne dla sondy.

W funkcji dodałem: document.formSonda.submit(); ale po kliknięciu zamiast być na stronie index.php wędruję do boxa sonda.php
jeżeli natomiast w formularzu dam w action index.php nie zlicza głosów w box'ie sondy.

Inna rzecz. Myślałem, że ten kod w ogóle nie działa, ponieważ testowałem w Internet Explorer, ale spróbowałem w FireFoxie i tutaj działa.
Czy ten kod jest uniwersalny i może działać na Internet Explorer również, ponieważ u mnie na tej przeglądarce nie działa prawidłowo, coś fiksuje i po sondzie echo?

--
Uruchomiłem skrypt dzisiaj i sonda pokazała się również w Internet Explorer, gdzie wczoraj było echo czyli nic w divie.
Wygląda tutaj że w IE też działa tylko IE zapamiętuje pierwszą zawartość diva i nie wyświetla zmieniających się losowo sond w sondażach.

Mam już prawie gotowe sondaże, skrypt sonda.php generuje losowo jedną z sond i potrzebuję Waszej pomocy, aby ukończyć sondę w divie.
W divie wyświetlana powinna być losowa sonda i FireFox działa bez kłopotu, ale w IE jest widoczna cały czas jedna pierwsza sonda?

Pojawił się kłopot z polskimi znakami w divie obsługiwanym przez powyższy kod.
Można temu jakoś zaradzić?

I wspomniany button Głosuj (na obrazku) co zrobić, aby zliczane były głosy i aby działał w divie ?
Button jest w formularzu sondy - plik sonda.php, a plik sonda.php wyświetlany jest w divie na stronie index.php .


--
Zrobiłem sondę na gotowe, działa jak trzeba div zamiast iframe.
Po prostu extra, jestem niemożliwy, dzięki chomiczek smile.gif

Zlicza głosy, bez kłopotu, zabezpieczenie przed nabijeniem glosów też działa i polskie znaki są.
Zastanawiam się jeszcze nad przeglądarką IE, dlaczego nie pokazuje losowych sond tylko jedną sondę, kiedy inne przeglądarki nie mają oporów?

Dla tych, którzy szukają rozwiązanie jest tutaj:

  1. <script type='text/javascript'>
  2. function odswiez() {
  3. var sonda = document.formSonda.form_kid.value;
  4. var glos = 0;
  5.  
  6. for (i=0; i < document.formSonda.glos.length; i++) {
  7. if ( document.formSonda.glos[i].checked == true )
  8. glos = document.formSonda.glos[i].value;
  9. }
  10.  
  11. //if (sonda != '') alert('Sonda, ' + sonda + '!');
  12. //if (glos != '') alert('Głos, ' + glos + '!');
  13.  
  14. $.ajax ({
  15. type: 'POST',
  16. url: 'sonda.php?form_kid='+sonda+'&glos='+glos,
  17. success: function(data) {
  18. $('#idSonda').html(data);
  19. }
  20. });
  21.  
  22. // $('#idSonda').load('sonda.php');
  23. }
  24. </script>


Kind Regards
chomiczek
taka mała uwaga, jeżeli masz załączone jquery (a masz) to zamień
document.formSonda.form_kid.value

na $('#formSonda).value() i podobnie w pozostałych przypadkach.

co do użycia buttona to nie dokładnie o to mi chodziło raczej o coś typu:
Kod
<img src="jakisObraz.jpg" alt="" id="idB" onclick="odswiez();" />
Malinaa
Nie wiem o co chodzi, ale próbowałem zamienić

zamieniłem: var sonda = document.formSonda.form_kid.value;
na: var sonda = $('#formSonda').val('form_kid');
i tak nie działa?

zamiast: <input type="button" value=".$sonda_glosuj." class="inputSonda" onclick="odswiez()">
dałem: <img src="grafika/button_green_60x22.gif" alt="" id="idSondaButton" onclick="odswiez();" onMouseOver="idSondaButton.src='grafika/button_orange_60x22.gif'" onMouseOut="idSondaButton.src='grafika/button_green_60x22.gif'">
ale img w ogóle mi tutaj nie pasuje.
Strona, którą piszę jest wielojęzyczna dla img musiałbym zrobić obrazki z napisami (Głosuj, Vote itd. tylko po co. Input zmienia też kolor po najechaniu myszką, a tutaj musiałem dodać onMouseOver, onMouseOut).
W input value mam słowo w jakim chcę języku, a w img. Jak to zrobić lepiej?

Można więcej szczegółów o co chodzi?
chomiczek
Cytat(Malinaa @ 7.08.2010, 16:41:04 ) *
var sonda = $('#formSonda').val('form_kid');


poczytaj tutaj: http://api.jquery.com/val/

powinno być: var sonda = $('#form_kid').val();

Cytat(Malinaa @ 7.08.2010, 16:41:04 ) *
zamiast: <input type="button" value=".$sonda_glosuj." class="inputSonda" onclick="odswiez()">
dałem: <img src="grafika/button_green_60x22.gif" alt="" id="idSondaButton" onclick="odswiez();" onMouseOver="idSondaButton.src='grafika/button_orange_60x22.gif'" onMouseOut="idSondaButton.src='grafika/button_green_60x22.gif'">
ale img w ogóle mi tutaj nie pasuje.
Strona, którą piszę jest wielojęzyczna dla img musiałbym zrobić obrazki z napisami (Głosuj, Vote itd. tylko po co. Input zmienia też kolor po najechaniu myszką, a tutaj musiałem dodać onMouseOver, onMouseOut).
W input value mam słowo w jakim chcę języku, a w img. Jak to zrobić lepiej?

poczytaj odnośnie click albo submit
jeden z pierwszych przykładów odnośnie subimita, rozwiązuje Twój problem.
Malinaa
Funkcja odswiez() teraz wygląda całkiem pięknie, bez petli i działa znakomicie

  1. <script type="text/javascript">
  2. function odswiez() {
  3. var sonda = $('#form_kid').val();
  4. var glos = $('input:radio[name=glos]:checked').val();
  5.  
  6. $.ajax ({
  7. type: 'POST',
  8. url: 'elementy/sonda/sonda.php?form_kid='+sonda+'&glos='+glos,
  9. success: function(data) {
  10. $('#idSonda').html(data);
  11. }
  12. });
  13. }


ale z input to się całkiem zakręciłem:

  1. <form action="destination.html" id="formSonda" method="post">
  2. <input type="button" value=".$sonda_text_submit." class="inputSonda" onclick="odswiez()">
  3. <div id="other">Trigger the handler</div>
  4. </form>
  5.  
  6. <script type="text/javascript">
  7. $('#formSonda').submit(function() {
  8. alert('Handler for .submit() called.');
  9. return false;
  10. });
  11.  
  12. $('#other').click(function() {
  13. $('#target').submit();
  14. });


Po co takie kombinacje jeśli input zostaje jak był, w jaki sposób rozwiązać mój problem?
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.