• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Funkcja nie chce wysłać danych do pliku

Object Storage Arubacloud
0 głosów
166 wizyt
pytanie zadane 28 listopada 2016 w JavaScript przez Q_Nick Mądrala (5,010 p.)

Chce aby funkcja wysłała dane z formularza do pliku php dane wpisane w pole. Ma być to prosty shoutbox. Kliknięcie na przycisk nie wywołuje dosłownie żadnej akcji. Firebug w ogóle nie widzi tego skryptu, a netbeans (w którym pisze) też nie pokazuje żadnego komunikatu.

<script type="text/javascript">
    function wysylanie()
    {
        alert('aa');
        var wiadomosc = $('#wiadomosc').val();
        var dataString= 'wiadomosc='+wiadomosc;
            
        $.ajax({
        type: 'POST' ;
        url: 'czat/wyslij.php';
        data: 'dataString';
        });
    }
</script>
<div class="czat">
    <h2>Shoutbox:</h2>
    <table class="table table-hover">
        <thead>
            <form>
                <td class="wiadomosc" colspan="2">
                    <input type="text" name="wiadomosc" class="form-control" id="wiadomosc">
                </td>
                <td class="przycisk">
                    <input type="button" value="Wyślij" class="btn btn-primary" onclick="wysylanie()">
                </td>
            </form>
        </thead>
    </table>
    <hr>
    <div class="czat_wiadomosci">
        <div id="czat_odczytaj">
            Ładowanie
        </div>
    </div>
</div>
<script type="text/javascript">
    setInterval("odczytaj()", 1);
    function odczytaj()
    {
        $('#czat_odczytaj').load('czat/wiadomosci.php #czat_odczytaj');
    }
</script>

 

2 odpowiedzi

+1 głos
odpowiedź 28 listopada 2016 przez Olaf Siwiński Mądrala (7,060 p.)
wybrane 30 listopada 2016 przez Q_Nick
 
Najlepsza

Nie wiem do końca w czym tkwił problem (domyślam się, że mogłeś coś nie do końca dobrze zapisać) ale udało mi się go naprawić. Tutaj jest twój, przerobiony kod:

<!DOCTYPE html>
<html lang="pl">
<head>
  <meta charset="utf-8">
</head>
<body>
<div class="czat">
  <h2>Shoutbox:</h2>
  <table class="table table-hover">
    <thead>
      <form>
        <td class="wiadomosc" colspan="2">
          <input type="text" name="wiadomosc" class="form-control" id="wiadomosc">
        </td>
        <td class="przycisk">
          <input type="button" value="Wylij" id="submit-btn" class="btn btn-primary">
        </td>
      </form>
    </thead>
  </table>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script type="text/javascript">
function wysylanie() {
  console.log("To działa!");
}

$('#submit-btn').click(wysylanie);
</script>
<body>
</html>

Mam jeszcze kilka uwag, do których zastosowanie się na pewno pomorze tobie w dalszej nauce programowania, jak i osobom czytającym twój kod. 

  • Nie wiem czy w swoim pliku HTML zapisałeś <!DOCTYPE html> i sekcje head, więc podałem prosty przykład w mojej odpowiedzi. Jeżeli nie do końca rozumiesz dlaczego powinna się ona tam znaleźć, odsyłam do tej strony - kurs html.
  • Skrypty javascript najlepiej zapisać po strukturze strony, a przed zamknięciem znacznika body. Przyśpiesza to "wizualnią" prędkość ładowania strony.
  • Do działania znacznej części twojego kodu niezbędna jest biblioteka jQuery. (https://jquery.com/). Jeżeli nie wczytasz jej przed załadowaniem twojego kodu js, nie ma on prawa działać.
  • Rozumiem, że funkcja odczytaj ma wczytać dane z pliku php wiadomosci.php. W takim wypadku użycie metody setInterval z drugim parametrem spowoduje wywołanie jej co jedną milisekundę. Owszem to da pożądany efekt, jednak odpytywanie pliku php (który zapewnie łączy się jeszcze z bazą danych) w tak krótkim odstępie czasu nie jest najlepszym pomysłem.
  • Gdy jako pierwszy parametr funkcji setInterval podasz ciąg znaków (string) spowoduje to wywołanie funkcji odczytaj przez eval (eval). Znacznie lepiej zapisać tę cześć kodu
    setInterval("odczytaj()", 1);

    W trochę inny sposób

    setInterval(odczytaj(), 1);
    
    // lub
    
    setInterval(function() {
      $('#czat_odczytaj').load('czat/wiadomosci.php #czat_odczytaj');
    }, 1);
  • jQuery.ajax (http://api.jquery.com/jquery.ajax/) jako parametr przyjmuje obiekt. Obiekty na początku nauki sprawiały trudność znacznej części programistów, jednak na tym etapie nie musisz się nimi zbytnio przejmować. Warto zapamiętać, że kolejne pola ("zmienne w obiekcie") w javascripcie zapisuje się po przecinku, i nie kończy się linii średnikiem. W tym przypadku domyślam się, że jako wartość data chciałeś podać treść wiadomości. Zapisując nazwę zmiennej w apostrofach przesyłasz sam wyraz dataString a nie wartość zmiennej o tej nazwie

    $.ajax({
      type: 'POST',
      url: 'czat/wyslij.php',
      data: dataString
    });

Mam nadzieję, iż mimo późnej odpowiedzi choć trochę pomogłem. Życzę powodzenia w dalszej nauce programowania.

+1 głos
odpowiedź 28 listopada 2016 przez Predo Bywalec (2,260 p.)
        $.ajax({
        type: 'POST' ;
        url: 'czat/wyslij.php';
        data: 'dataString';
        });

Zastanawiam się co to za składnia. Nie jestem biegły w temacie ale dla jQuery jest coś takiego

$.get(url, data, callback);
Lub:
$.post(url, data, callback);

Z drugiej strony nie napisałeś do końca co działa a co nie. Czy po kliknięciu w buttona funkcja wysylanie() w ogóle się odpala?

 

komentarz 28 listopada 2016 przez Vento Pasjonat (17,120 p.)
komentarz 30 listopada 2016 przez Q_Nick Mądrala (5,010 p.)
Udało mi się samemu to naprawić, ale nie napisałem tego tutaj. Ja w ogóle nie znam AJAX ani JQuery. Wiem że błąd robiłem z tymi przecinkami, bo wstawiałem ; zamiast , ale dziękuje za pomoc.

Podobne pytania

0 głosów
0 odpowiedzi 277 wizyt
pytanie zadane 22 lipca 2017 w JavaScript przez Jonki Dyskutant (8,180 p.)
–1 głos
1 odpowiedź 299 wizyt
0 głosów
0 odpowiedzi 114 wizyt
pytanie zadane 25 lipca 2017 w Java przez Jonki Dyskutant (8,180 p.)

92,632 zapytań

141,501 odpowiedzi

319,880 komentarzy

62,013 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...