Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [AJAX]Usuwanie z bazy danych z widocznym efektem
pawel06281990
post 12.09.2020, 21:22:29
Post #1





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 10.01.2014

Ostrzeżenie: (0%)
-----


Witam,

Mam problem z efektem wizualnym usuwania z bazy danych juz tłumacze o co chodzi dokładnie aby każdy zrozumiał i udzielił mi pomocy.

Mam skrypt ajax on działa usuwa mi z bazy danych dany rekord ale chce zrobić zeby automatycznie znikał mi element który zostaje usunięty.

Tak wygląda mój skrypt ajax


  1. jQuery(document).ready(function($){
  2. $("#delete").click(function(e) {
  3. e.preventDefault();
  4.  
  5.  
  6. var Id= $(".Id").val();
  7. // Returns successful data submission message when the entered information is stored in database.
  8. var data = 'Id='+ Id;
  9.  
  10.  
  11. $("#img_delete").show();
  12. $("#img_delete").fadeIn(400).html('<img src="../assets/images/ajax-loading.gif" />');
  13. $.ajax({
  14. type: "POST",
  15. url: link.ajax_url +"?action=delete_zmarli",
  16. data: data,
  17. error: function(xhr, ajaxOptions, thrownError)
  18. {
  19. jQuery("#response_message").html('<div id="close-message"><div class="notice notice-error">Przepraszamy nie można było usunąć wpisu z bazy, sprawdź dane i spróbuj ponownie.</div></div>');
  20. $("#img_delete").hide();
  21. console.log(data);
  22. },
  23. success: function(data){
  24. jQuery("#response_message").html('<div id="close-message"><div class="notice notice-success">element usunięty poprawnie</div></div>');
  25. $("#img_delete").hide();
  26.  
  27. }
  28. });
  29.  
  30. return false;
  31. });
  32. });


Wszystkie wyniki mam wyświetlane w tabelce.

I jak mówiłem nie mogę osiągnąć efektu że dany element znika.

Jak to zrobić questionmark.gif

Ten post edytował pawel06281990 12.09.2020, 21:24:05
Go to the top of the page
+Quote Post
viking
post 13.09.2020, 05:14:12
Post #2





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


I #delete jest w każdym wierszu tabeli? Id może być jeden na stronie. Przycisk jest wewnątrz tr więc przez parent możesz się dobrać do tr i go usunąć w callbacku success.


--------------------
Go to the top of the page
+Quote Post
pawel06281990
post 24.03.2021, 17:03:02
Post #3





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 10.01.2014

Ostrzeżenie: (0%)
-----


Cytat(viking @ 13.09.2020, 06:14:12 ) *
I #delete jest w każdym wierszu tabeli? Id może być jeden na stronie. Przycisk jest wewnątrz tr więc przez parent możesz się dobrać do tr i go usunąć w callbacku success.


Niema w każdym wierszy tabeli #delete.
Tak mam jedno id i przycisk jest w <tr><td></td></tr>.

Witam ponownie ,

po zmieniałem trochę w kodzie dodałem ale to niedziała nie usuwa mi z bazy danych ale na stronie usuwa mi całą tabelą którą mam w tr tak wygląda mój sktrypt

[JAVASCRIPT] pobierz, plaintext
  1. $(".usun").click(function(w) {
  2. w.preventDefault();
  3. var parent = $(this).parent();
  4. $("#img_delete").show();
  5. $("#img_delete").fadeIn(400).html('<img src="../wp-content/plugins/wp-zmarli/modul/platnosci/assets/images/loading.gif" />');
  6.  
  7. $.ajax({
  8. type: "GET",
  9. url: wp_zmarli_link.ajax_url +"?action=delete",
  10. data : "przelew_id=" + parseInt($(this).attr('przelew_id')),
  11.  
  12. beforeSend: function() {
  13. parent.animate({'backgroundColor':'#fb6c6c'},300);
  14. },
  15. error: function(xhr, ajaxOptions, thrownError)
  16. {
  17. toastr.warning('Przepraszamy wystąpił błąd sprawdz dane i spróbój ponownie')
  18. $("#img_edit_uslugi").hide();
  19. },
  20. success: function(data){
  21. toastr.success('Usługa została zaktualizowana')
  22. $("#img_delete").hide();
  23. parent.slideUp(300,function() {
  24. parent.remove();
  25. });
  26. console.log(data);
  27. }
  28. });
  29.  
  30. return false;
  31. });
[JAVASCRIPT] pobierz, plaintext


A tu jest moja tabela
  1. <table class="table table-bordered">
  2. <thead>
  3.  
  4. <tr>
  5. <th style="width: 22%"><?php esc_html_e('Czas trwania', 'zmarli');?></th>
  6. <th><?php _e('Klucz', 'zmarli');?></th>
  7. <th><?php _e('Kwota', 'zmarli');?></th>
  8. <th><?php _e('Opcje', 'zmarli');?><div id="img_delete"></div></th>
  9. </tr>
  10. </thead>
  11. <tbody>
  12. <?php
  13. if($uslugi_dopay_lista){
  14.  
  15. foreach ($uslugi_dopay_lista as $lista_dotpay) {
  16.  
  17.  
  18. echo'<tr class="usun" id="usun_'.$lista_dotpay['przelew_id'].'">';
  19. echo'<td>';
  20. if ($lista_dotpay['przelew_czas'] == 60*60*24*365) {
  21. echo "Rok";
  22. } elseif ($lista_dotpay['przelew_czas'] == 60*60*24*730) {
  23. echo "2 Lata";
  24. } elseif ($lista_dotpay['przelew_czas'] == 60*60*24*1095) {
  25. echo "3 Lata";
  26. } elseif ($lista_dotpay['przelew_czas'] == 60*60*24*1254) {
  27. echo "3 Lata";
  28. } else {
  29. echo round($lista_dotpay['przelew_czas'] / 86400, 2) ." (dni)";
  30. }
  31. echo'</td>';
  32. echo '<td>'.$lista_dotpay['przelew_klucz'].'</td>';
  33.  
  34. echo '<td>'.$lista_dotpay['przelew_kwota'].'</td>';
  35. echo '<td>';
  36. echo "<a href='".PLATNOSCI_URL."?page=usluga_dotpay&przelew_id=".$lista_dotpay['przelew_id']."'><img src='".PLATNOSCI_PATH."/assets/images/delete.png' title='Skasuj'></a> |";
  37. echo " <a href='".PLATNOSCI_URL."?page=edit_dotpay&przelew_id=".$lista_dotpay['przelew_id']."'><img src='".PLATNOSCI_PATH."/assets/images/edit.png' title='Edytuj'></a>";
  38. echo'</td>';
  39.  
  40. echo'</tr>';
  41. }
  42.  
  43. ?>
  44. </tbody>
  45. </table>


co jest nie tak questionmark.gif

Ten post edytował pawel06281990 24.03.2021, 17:04:16
Go to the top of the page
+Quote Post
Codeleft
post 24.03.2021, 19:41:55
Post #4





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.03.2021

Ostrzeżenie: (0%)
-----


1.
var parent = $(this).parent(); < to jst zbędne

Zamiast
  1. parent.remove();


wklej
  1. $(this).closest('tr').remove();


2.
Tworzysz zły chwyt elementu dodatkowo jeśli elementy tworzone są asynchronicznie to koniecznie poczytaj o delegowaniu.
Proponuje zawsze delegować do rodzina elementu bądź jego głównego kontenera jeśli coś usuwasz bądź tworzysz z Ajaxem.

$('.table table-bordered').on('click','tbody > .usun',function(){
////KOD

});

3.
  1. error: function(xhr, ajaxOptions, thrownError)
  2. {
  3. toastr.warning('Przepraszamy wystąpił błąd sprawdz dane i spróbój ponownie')
  4. $("#img_edit_uslugi").hide();
  5. },


dodaj
  1. consol.log('XHR: '+xhr);
  2. consol.log('ajaxOptions: '+ajaxOptions);
  3. consol.log('thrownError:'+thrownError);


i zobacz jakie błędy w konsoli się pojawiają.

bądź:
  1. console.log(data);


co tutaj konsola powiada?

4.
Czas zastąpić var -> let/const smile.gif

Ten post edytował Codeleft 24.03.2021, 19:42:24
Go to the top of the page
+Quote Post
pawel06281990
post 24.03.2021, 21:26:29
Post #5





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 10.01.2014

Ostrzeżenie: (0%)
-----


Nie stety nic nie pokazuje bo jak kliknę w ikonkę kasuj to mi dodaje w pasku wyszukiwarki adres oraz &przelew_id=1

zrobiłem tak jak napisałem czyli tak wygląda skrypt po zmianach

[JAVASCRIPT] pobierz, plaintext
  1. jQuery(document).ready(function($){
  2. $('.table table-bordered').on('click','tbody > .usun',function(){
  3.  
  4. let przelew_id= document.getElementById('usun_'+przelew_id);
  5. $("#img_delete").show();
  6. $("#img_delete").fadeIn(400).html('<img src="../wp-content/plugins/wp-zmarli/modul/platnosci/assets/images/loading.gif" />');
  7.  
  8. $.ajax({
  9. type: "GET",
  10. url: wp_zmarli_link.ajax_url +"?action=delete",
  11. data : "przelew_id=" + parseInt($(this).attr('przelew_id')),
  12.  
  13. beforeSend: function() {
  14. parent.animate({'backgroundColor':'#fb6c6c'},300);
  15. },
  16. error: function(xhr, ajaxOptions, thrownError)
  17. {
  18. toastr.warning('Przepraszamy wystąpił błąd sprawdz dane i spróbój ponownie')
  19. $("#img_delete").hide();
  20. consol.log('XHR: '+xhr);
  21. consol.log('ajaxOptions: '+ajaxOptions);
  22. consol.log('thrownError:'+thrownError);
  23. },
  24. success: function(data){
  25. toastr.success('Usługa została zaktualizowana')
  26. $("#img_delete").hide();
  27. parent.slideUp(300,function() {
  28. $(this).closest('tr').remove();
  29. });
  30. console.log(data);
  31. }
  32. });
  33.  
  34. return false;
  35. });
  36.  
  37. });
[JAVASCRIPT] pobierz, plaintext


nawet dodałem let ale nic to nie zmieniło
Go to the top of the page
+Quote Post
viking
post 25.03.2021, 07:14:03
Post #6





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Dlaczego mieszasz jquery z natywnym js przy wybieraniu elementów? Gdzie w tym kodzie masz atrybut $(this).attr('przelew_id')? A nawet jeśli już to powinien być jako data-*. Dlaczego w ogóle zezwalasz na metodę get przy kasowaniu? console.log nie consol. Od lata używa się done/fail nie error i success.


--------------------
Go to the top of the page
+Quote Post
pawel06281990
post 25.03.2021, 13:35:52
Post #7





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 10.01.2014

Ostrzeżenie: (0%)
-----


Przerabiam skrypt którego uzywam do zapisu i do edycji i chce go użyć do kasowania bez przeładowywania z widocznym efektem że tabelka tr o podanym id z bazy znika z fajnym efektem znikającym.

Ale jak tak przerabiam skrypt to nic się nie dzieje w konsoli nie widzie czy pokazuje błąd czy jakiś efekt zwraca.

teraz tak wygląda mój skrypt


[JAVASCRIPT] pobierz, plaintext
  1. jQuery(document).ready(function($){
  2. $(".usun").click(function(w) {
  3. w.preventDefault();
  4.  
  5. $("#img_delete").show();
  6. $("#img_delete").fadeIn(400).html('<img src="../wp-content/plugins/wp-zmarli/modul/platnosci/assets/images/loading.gif" />');
  7.  
  8. $.ajax({
  9. type: "POST",
  10. url: wp_zmarli_link.ajax_url +"?action=delete",
  11. data : {
  12. usun : $(this).attr('przelew_id')
  13. },
  14.  
  15. fail: function(xhr, ajaxOptions, thrownError)
  16. {
  17. toastr.warning('Przepraszamy wystąpił błąd sprawdz dane i spróbój ponownie')
  18. $("#img_delete").hide();
  19. console.log('XHR: '+xhr);
  20. console.log('ajaxOptions: '+ajaxOptions);
  21. console.log('thrownError:'+thrownError);
  22. },
  23. done: function(data){
  24. toastr.success('Usługa została zaktualizowana')
  25. $("#img_delete").hide();
  26. $(this).closest('tr').remove();
  27.  
  28. console.log(data);
  29. }
  30. });
  31.  
  32. return false;
  33. });
  34.  
  35. });
[JAVASCRIPT] pobierz, plaintext



A tak wygląda moja tabelka

  1. <table class="table table-bordered">
  2. <thead>
  3.  
  4. <tr>
  5. <th style="width: 22%"><?php esc_html_e('Czas trwania', 'zmarli');?></th>
  6. <th><?php _e('Klucz', 'zmarli');?></th>
  7. <th><?php _e('Kwota', 'zmarli');?></th>
  8. <th><?php _e('Opcje', 'zmarli');?><div id="img_delete"></div></th>
  9. </tr>
  10. </thead>
  11. <tbody>
  12. <?php
  13. if($uslugi_dopay_lista){
  14.  
  15. foreach ($uslugi_dopay_lista as $lista_dotpay) {
  16.  
  17.  
  18. echo'<tr class="usun" data-id="usun_'.$lista_dotpay['przelew_id'].'">';
  19. echo'<td>';
  20. if ($lista_dotpay['przelew_czas'] == 60*60*24*365) {
  21. echo "Rok";
  22. } elseif ($lista_dotpay['przelew_czas'] == 60*60*24*730) {
  23. echo "2 Lata";
  24. } elseif ($lista_dotpay['przelew_czas'] == 60*60*24*1095) {
  25. echo "3 Lata";
  26. } elseif ($lista_dotpay['przelew_czas'] == 60*60*24*1254) {
  27. echo "3 Lata";
  28. } else {
  29. echo round($lista_dotpay['przelew_czas'] / 86400, 2) ." (dni)";
  30. }
  31. echo'</td>';
  32. echo '<td>'.$lista_dotpay['przelew_klucz'].'</td>';
  33.  
  34. echo '<td>'.$lista_dotpay['przelew_kwota'].'</td>';
  35. echo '<td>';
  36. echo "<a class='usun' href='".PLATNOSCI_URL."?page=usluga_dotpay&przelew_id=".$lista_dotpay['przelew_id']."'><img src='".PLATNOSCI_PATH."/assets/images/delete.png' title='Skasuj'></a> |";
  37. echo " <a href='".PLATNOSCI_URL."?page=edit_dotpay&przelew_id=".$lista_dotpay['przelew_id']."'><img src='".PLATNOSCI_PATH."/assets/images/edit.png' title='Edytuj'></a>";
  38. echo'</td>';
  39.  
  40. echo'</tr>';
  41. }
  42.  
  43. ?>
  44. </tbody>
  45. </table>



Gdzie robię problem bo mi nie działa sadsmiley02.gif
Go to the top of the page
+Quote Post
viking
post 25.03.2021, 13:48:50
Post #8





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Już ci pisałem. Gdzie masz ten atrybut przelew_id i dlaczego uważasz że element powinien mieć twój atrybut zamiast data-przelewId?


--------------------
Go to the top of the page
+Quote Post
pawel06281990
post 25.03.2021, 13:54:44
Post #9





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 10.01.2014

Ostrzeżenie: (0%)
-----


Cytat(viking @ 25.03.2021, 13:48:50 ) *
Już ci pisałem. Gdzie masz ten atrybut przelew_id i dlaczego uważasz że element powinien mieć twój atrybut zamiast data-przelewId?


Ten atrybut mam w tym elemencie

[JAVASCRIPT] pobierz, plaintext
  1. $.ajax({
  2. type: "POST",
  3. url: wp_zmarli_link.ajax_url +"?action=delete",
  4. data : {
  5. usun : $(this).attr('przelew_id')
  6. },
[JAVASCRIPT] pobierz, plaintext


A id dodałem do tego elementu
  1. <tr class="usun" data-id="usun_'.$lista_dotpay['przelew_id'].'">';


Ten post edytował pawel06281990 25.03.2021, 13:54:59
Go to the top of the page
+Quote Post
viking
post 25.03.2021, 16:54:21
Post #10





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Jak odbierasz dane to usuń co zawiera? I zrozum że twoje przelew_id odnosiło by się do elementu np <span przelew_id/>


--------------------
Go to the top of the page
+Quote Post
pawel06281990
post 25.03.2021, 16:57:21
Post #11





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 10.01.2014

Ostrzeżenie: (0%)
-----


Ja zrozumiem tylko dane które odbieram żeby zapisać to sa w class w <form> a jak zrobić żeby nie dodawać <form> tylko pobrać je z tabeli tak jak pokazałem w moim kodzie questionmark.gif
Go to the top of the page
+Quote Post
viking
post 26.03.2021, 11:57:55
Post #12





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Dokładnie to samo co w pytaniu wyżej https://jsfiddle.net/qeyh0dsm/


--------------------
Go to the top of the page
+Quote Post
pawel06281990
post 26.03.2021, 14:09:05
Post #13





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 10.01.2014

Ostrzeżenie: (0%)
-----


Cytat(viking @ 26.03.2021, 11:57:55 ) *
Dokładnie to samo co w pytaniu wyżej https://jsfiddle.net/qeyh0dsm/


Ok działa tak jak kliknę w kolumnę a jak to samo zrobić żeby działało w klikniecie w link usuwania w danej kolumnie??
Go to the top of the page
+Quote Post
nospor
post 26.03.2021, 15:36:08
Post #14





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6296
Dołączył: 27.12.2004




No to zamiast do TD, podepnij zdarzeie to linka


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pawel06281990
post 26.03.2021, 17:13:36
Post #15





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 10.01.2014

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 26.03.2021, 15:36:08 ) *
No to zamiast do TD, podepnij zdarzeie to linka


Ok dzięki za pomoc jest ok
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 01:05