Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ XML, AJAX _ Przesylanie zmiennej

Napisany przez: prostowniczek2 22.02.2023, 23:15:10

Witam. Posiadam na stronie sklep, w którym jest kilka npc. Od danego npc zależy co można sprzedać. Musze przekazac zmienna id item, oraz id npc.
Z id item nie mam problemu, lecz nie moge przeslac tego 2.

Plik index:

  1. $(document).ready(function(){
  2. $('.view_data').click(function(){
  3. var id = $(this).attr("id");
  4. $.ajax({
  5. url:"ajax/item-details.php",
  6. method:"post",
  7. data:{id:id},
  8. success:function(data){
  9. $('#id').html(data);
  10. $('#dataModal').modal("show");
  11. }
  12. });
  13. });
  14. });


Kod ktory wyswietla informacje o item po kliknieciu w niego:
  1. <span name="view" value="view" id="<?php http://www.php.net/echo $wiersz["id"]; ?>" class="view_data" /><span class='tooltipEl' id='user_<?= $id ?>'><img src=<?=$obrazek?>></span></span>


Zmienna id itemu jest w pliku jako:
  1. $_POST["id"]


Teraz potrzebuje jakos zdobyc id npc. bardzo prosze o pomoc, bo siedze juz z tym 2 godziny i nic sad.gif

Napisany przez: Salvation 23.02.2023, 00:10:33

Brakuje mi informacji co to jest to NPC i gdzie ono jest "fizycznie" w kodzie. Bo ID itemu to jest to:

Kod
id="<?php echo $wiersz["id"]; ?>"


Napisany przez: viking 23.02.2023, 06:18:00

data:{id:id, idnpc:idnpc},

Napisany przez: prostowniczek2 23.02.2023, 06:39:51

Id fizycznie w kodzie jest w tym samym pliku pod zmienna $npc, jeśli zamienię wiersz_id na $npc to przesyłam id npc. A potrzebuję sobie zmienne

Napisany przez: trueblue 23.02.2023, 08:46:51

Trudno się czyta Twoje posty.

Skoro zmienna $npc jest w tym samym kodzie, to dlaczego nie dodasz jej jako kolejny atrybut do elementu <span>?
Swoją drogą atrybuty, tu atrybut id, nie służy do przechowywania wartości id z bazy danych, ale nadawania unikalnego identyfikatora w drzewie DOM i nie może zaczynać się cyfrą.
Do takich zadań jak Twoje używa się atrybutów data-*.

Napisany przez: prostowniczek2 23.02.2023, 10:23:02

Problem msm taki, że nie wiem jak dodać ten atrybut w span, I przesłać go data razem z atrybutem id.
Tym kodem co mam teraz po naciśnięciu obrazka, w pliku item-details dostaje tylko atrybut id, a potrzebuję 2 atrybut z id2 np

Napisany przez: trueblue 23.02.2023, 10:26:08

Problem jest chyba taki, że nie czytasz dokładnie co piszemy.
Rozwiązania są tu:
https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes
http://forum.php.pl/index.php?s=&showtopic=270735&view=findpost&p=1261185

Napisany przez: prostowniczek2 23.02.2023, 18:16:26

Udało mi się !
A rozwiązanie zrobiłem takie:

  1. $(document).ready(function(){
  2. $('.view_data').click(function(){
  3. const article = document.querySelector("#idnpc");
  4. var id = $(this).attr("id");
  5. var idnpc = article.dataset.idnpc;
  6. $.ajax({
  7. url:"ajax/item-details.php",
  8. method:"post",
  9. data:{id:id, idnpc:idnpc},
  10. success:function(data){
  11. $('#id').html(data);
  12. $('#dataModal').modal("show");
  13. }
  14. });
  15. });
  16. });


  1. <span name="view" value="view" id="<?php http://www.php.net/echo $wiersz["id"]; ?>" class="view_data" /><article id="idnpc" data-idnpc="<?=$npc?>"></article><span class='tooltipEl' id='user_<?= $id ?>' ><img src=<?=$obrazek?>></span></span>


Dziękuuje za 1 link ktory odales.

Napisany przez: trueblue 23.02.2023, 18:55:49

1. Dlaczego nie dodałeś tego atrybutu do elementu <span>, tylko utworzyłeś nowy?
2. Ten nowy element powinien miec unikalne id, w ten sposób będziesz dla każdego klikniętego <span> wysyłał idnpc z pierwszego <article>
3. Skoro utworzyłeś atrybut data-idnpc z pomocą atrybutuów data-*, to dlaczego nie zmieniłeś analogicznie w <span> id na data-id?

Napisany przez: prostowniczek2 24.02.2023, 07:25:02

Po pracy spróbuję to zrobić jak piszesz. Podkreślam, że z ajax zapoznałem się 3 dni temu Głównie próbujedziałaćz poradników i gotowców, wtedy więcej kunam. Będę miał jeszcze dużo pytań biggrin.gif

Napisany przez: viking 24.02.2023, 07:56:32

Ajax to tylko metoda przesyłania żądania w tle. Tu jeszcze mieszasz dodatkowo natywne metody js const article = document.querySelector("#idnpc"); z jquery.

Napisany przez: Salvation 24.02.2023, 15:10:15

Jak już, to HTML powinien wyglądać tak:

  1. <http://december.com/html/4/element/span.html name="view" data-id="<?= $wiersz['id'] ?>" data-idnpc="<?= $npc ?>" class="view_data" /><http://december.com/html/4/element/span.html class="tooltipEl" id="user_<?= $id ?>"><http://december.com/html/4/element/img.html src="<?= $obrazek ?>" /></http://december.com/html/4/element/span.html></http://december.com/html/4/element/span.html>

A tak JS:
[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function() {
  2. $(document).on('click', '.view_data', function() {
  3. const id = $(this).data('id') || '';
  4. const idnpc = $(this).data('idnpc') || '';
  5.  
  6. $.ajax({
  7. url: 'ajax/item-details.php',
  8. method: 'post',
  9. data: {
  10. id: id,
  11. idnpc: idnpc
  12. },
  13. success: function(data) {
  14. $('#id').html(data);
  15. $('#dataModal').modal('show');
  16. }
  17. });
  18. });
  19. });
[JAVASCRIPT] pobierz, plaintext

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)