Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery][php?] Problem z load - nie ładuje strony
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
deha21
Witam,
Mam skrypt przenoszenia obrazków z galerii do góry/na dół. Po kliknięciu wykonuje się skrypt (poprawnie) a następnie ma załadować ponownie stronę (showpics.php) w divie (#pics).
[JAVASCRIPT] pobierz, plaintext
  1. $(".move").click(function(){
  2. var id = $("#id").val();
  3. var pic = $(this).attr("id");
  4. var move = $(this).attr("name");
  5. $.ajax({
  6. type: "GET",
  7. url: "move.php",
  8. data: {id: id, pic: pic, move: move},
  9. onsuccess:$("#pic").load("showpics.php?id="+id),
  10. });
  11. });
[JAVASCRIPT] pobierz, plaintext

  1. $id=$_GET['id'];
  2. require("../config.php");
  3. if (!isset($id)) {
  4.  
  5. $result=mysql_query("SELECT * FROM zdjecia WHERE active='0' ORDER BY position DESC");
  6. while($row=mysql_fetch_array($result)) {
  7. echo "<div class='pic'><img src='../upload/thumb_".$row['file']."'><a href='' class='delete' id='".$row['id']."'><img src='del.png' alt='Usuń' title='Usuń'></a>
  8. <a href='' id='".$row['id']."' class='move' name='up' title='Przenieś wyżej'><img src='up.png' alt='góra'></a>
  9. <a href='' id='".$row['id']."' class='move' name='down' title='Przenieś niżej'><img src='down.png' alt='dół'></a>
  10. </div>";
  11. }
  12.  
  13. } elseif (isset($id)) {
  14.  
  15. $result=mysql_query("SELECT * FROM zdjecia WHERE auto='$id' ORDER BY position DESC");
  16. while($row=mysql_fetch_array($result)) {
  17.  
  18. echo "<div class='pic'><img src='../gallery/".$id."/thumb_".$row['file']."'>
  19. <a href='' class='delete' id='".$row['id']."' rel='".$row['file']."'><img src='del.png' alt='Usuń' title='Usuń'></a>
  20. <a href='' id='".$row['id']."' class='move' name='up' title='Przenieś wyżej'><img src='up.png' alt='góra'></a>
  21. <a href='' id='".$row['id']."' class='move' name='down' title='Przenieś niżej'><img src='down.png' alt='dół'></a>
  22. </div>";
  23. }
  24.  
  25. }

Niestety po kliknięciu cała strona przeładowuje się. Przy tym nie przesyła zmiennej która potrzebna jest do jej otworzenia (id galerii), a więc zostaje pusta strona tak na prawdę.
Dziwne, że taki sam skrypt działa mi na innej mojej stronie. Z tym, że tamta ma inną budowę ale to nie powinno mieć znaczenia.
wookieb
nie masz
Kod
return false;

na koncu funkcji zdarzenia click
deha21
O to chodzi?
[JAVASCRIPT] pobierz, plaintext
  1.  
  2. $(".move").click(function(){
  3. var id = $("#id").val();
  4. var pic = $(this).attr("id");
  5. var move = $(this).attr("name");
  6. $.ajax({
  7. type: "GET",
  8. url: "move.php",
  9. data: {id: id, pic: pic, move: move},
  10. onsuccess:$("#pic").load("showpics.php?id="+id),
  11. });
  12. return false;
  13. });
[JAVASCRIPT] pobierz, plaintext

Nie pomaga. Dalej to samo :/
wookieb
A teraz zobacz jaki parametr w metodzie ajax przyjmuje wlasciwosc onsuccess a potem zobacz do czego sluzy load, bo widzę, że nie masz pojęcia jak to wyglada.
deha21
Szukałem o onsuccess ale nic konkretnego nie znalazlem. Może i nie wiem do czego służy ale wiem co umożliwia. Tak jak pisałem, robiłem coś takiego wcześniej i działało więc dlaczego teraz to nie działa. To mnie zastanawia.
wookieb
Spójrz na wykorzystanie load
http://docs.jquery.com/Ajax/load#urldatacallback
Cytat
Load HTML from a remote file and inject it into the DOM.

Robi dokładnie to co chciałeś

Dodatkowo onSuccess (a dokładniej "success" - literówkę miałeś) powinien być callbackiem do funkcji a ty podałeś mu kawałek kodu , który robi to samo co przed chwilą się wykonało smile.gif
deha21
Cytat(wookieb @ 4.01.2010, 20:52:11 ) *
Dodatkowo onSuccess (a dokładniej "success" - literówkę miałeś) powinien być callbackiem do funkcji a ty podałeś mu kawałek kodu , który robi to samo co przed chwilą się wykonało smile.gif

Czyli ma być "success"... dziwne bo czasami widzę success, czasami onsuccess ale zawsze działa mi tak samo :/
Nie rozumiem jak moge podać kod który się już wcześniej wykonał? Chyba, że nie chodzi o load... Ehhh pokiełbasione to winksmiley.jpg
Fifi209
Robisz:

[JAVASCRIPT] pobierz, plaintext
  1. success: function(data) {
  2. $("#twojdiv").html(data);
  3. }
[JAVASCRIPT] pobierz, plaintext


Czy coś na ten styl. ;]
Przyjąłem, że dane odbierasz w html'u.

Poza tym albo ajax albo load smile.gif
deha21
To teraz już nic nie rozumiem winksmiley.jpg Robiąc sposobem fifi209 div się nie ładuje strony tylko pokazuje adres tego czego ma załadować. To za sprawą html().
Zatem jak zrobić żeby po kliknięciu div #pic przeładował się jeszcze raz (lub załadował stronę ze skryptem)?

EDIT: Dodam, że skrypt który zamieściłem w pierwszym poście działa na innej podstronie. Z tym, że tam nie jest przesyłana zmienna:
[JAVASCRIPT] pobierz, plaintext
  1. onsuccess:$("#pic").load("showpics.php")
[JAVASCRIPT] pobierz, plaintext
wookieb
Co to u ciebie move.php a showpics.php?
Wystaw to publicznie to łatwiej będzie Ci pomóc.
deha21
move.php to skrypt który przenosi zdjęcia o pozcyję wyżej (w bazie mysql)
showpics.php to wyświetlanie zdjęć z bazy

showpics.php:
  1. $result=mysql_query("SELECT * FROM zdjecia WHERE auto='$id' ORDER BY position DESC");
  2. while($row=mysql_fetch_array($result)) {
  3.  
  4. echo "<div class='pic'><img src='../gallery/".$id."/thumb_".$row['file']."'>
  5. <a href='#' class='delete' id='".$row['id']."' rel='".$row['file']."'><img src='del.png' alt='Usuń' title='Usuń'></a>
  6. <a href='#' id='".$row['id']."' class='move' name='up' title='Przenieś wyżej'><img src='up.png' alt='góra'></a>
  7. <a href='#' id='".$row['id']."' class='move' name='down' title='Przenieś niżej'><img src='down.png' alt='dół'></a>
  8. </div>";
  9. }

move.php:
  1. if(isset($_GET['move'], $_GET['pic']) && in_array($_GET['move'], array('up', 'down'))){
  2. $sign = $_GET['move'] == 'up' ? '>' : '<';
  3. $sort = $_GET['move'] == 'up' ? 'ASC' : 'DESC';
  4.  
  5. $id = (int) $_GET['pic'];
  6.  
  7. $r = mysql_fetch_object(mysql_query('SELECT position FROM zdjecia WHERE id = '.$id));
  8. $cPos = $r->position;
  9.  
  10. $s = mysql_fetch_object(mysql_query('SELECT id, position FROM zdjecia WHERE position ' . $sign . $cPos . ' AND auto="'.$_GET['id'].'" ORDER BY position ' . $sort . ' LIMIT 1;'));
  11.  
  12. if(!is_object($s)){
  13. echo '<span style="color: #37bbeb;";>Pierwszego elementu nie wolno przenosić w góre, a ostatniego w dół.</span><br><br>';
  14. }
  15.  
  16. mysql_query(sprintf('UPDATE zdjecia SET position = %s WHERE id = %s;', $s->position, $id));
  17. mysql_query(sprintf('UPDATE zdjecia SET position = %s WHERE id = %s;', $cPos, $s->id));
  18. }

One oczywiście działają poprawnie. Przy linkach .move dodałem a href="#" i strona nie przeładowuje się już ale...tylko raz można wykonać przeniesienie zdjęcia. Potem tak jakby nic się nie działo przy kliknięciu.
wookieb
Nie wiem czy będzie na 100% dobrze ale cóż..
[JAVASCRIPT] pobierz, plaintext
  1.  
  2. // zdefiniuj gdzies aby byla zmienna globalna
  3. var imageId = false;
  4.  
  5. $(".move").click(function(){
  6. var id = $("#id").val();
  7. var pic = $(this).attr("id");
  8. imageId = id;
  9. var move = $(this).attr("name");
  10. $.ajax({
  11. type: "GET",
  12. url: "move.php",
  13. data: {id: id, pic: pic, move: move},
  14. onsuccess: function()
  15. {
  16. $("#pic").load("showpics.php?id="+imageId)
  17. }
  18. });
  19. });
  20.  
  21. // jednakze preferuje zrobic to w jednej akcji gdzie przesuniesz zdjecie oraz zaladuje to co chcesz
  22. //a wtedy
  23.  
  24. $(".move").click(function(){
  25. var id = $("#id").val();
  26. var pic = $(this).attr("id");
  27. imageId = id;
  28. var move = $(this).attr("name");
  29. $.ajax({
  30. type: "GET",
  31. url: "move_and_showpics.php",
  32. data: {id: id, pic: pic, move: move},
  33. onsuccess: function(data)
  34. {
  35. $('#pic').html(data);
  36. }
  37. });
  38. });
[JAVASCRIPT] pobierz, plaintext

deha21
Niestety sprowadzenie do jednego pliku wydaje się być niewygodne bo move.php jest używany jeszcze do innych rzeczy które nie korzystają z showpics.php. Jednak wydaje mi się, że i to by nie działało.
Teraz prawie działa - klikam, przenosi, przeładowuje. Klikam drugi raz - nic.
wookieb
[JAVASCRIPT] pobierz, plaintext
  1. $('.move').live('click',function()
  2. {
  3. // chyba wiadomo co..
  4. });
[JAVASCRIPT] pobierz, plaintext
deha21
Alleluja, o to chodziło! winksmiley.jpg
Dzięki!
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.