Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] $.get() nie przesyła danych
Forum PHP.pl > Forum > XML, AJAX
pehaperowiec
HTML
Kod
    <select name="">
        <option value="">wybierz</option>
        <option value="good">good</option>
        <option value="bad">bad</option>
    </select>
    <p id="result"></p>

jQuery
Kod
$().ready(function() {
    $("option").bind({
        click:function() {
            $.get(
                'data.php',
                {what: $(this).val()},
                function(data) {
                    $("#result").html(data);    
                }
            );
        }                
    });
});

PHP
Kod
<?php

echo $_GET['what'];

?>
Gdzie robie błąd? Chcę by dane przetworzone przez data.php zostały umieszczone w #result
mortus
Pierwszy raz spotykam się z takim zapisem skryptu jQuery i nie wiem, czy zapis ten jest prawidłowy. Sam przyzwyczaiłem się do nieco innego zapisu:
  1. <!-- sekcja head -->
  2. $(document).ready(function() {
  3. $('#what').bind('click', function() {
  4. $.get('data.php', { what: $(this).val(); }, function(data) {
  5. $('#result').html(data);
  6. });
  7. });
  8. });
  9. <!-- sekcja body -->
  10. <select id="what" name="what">
  11. <option value="">wybierz</option>
  12. <option value="good">good</option>
  13. <option value="bad">bad</option>
  14. <p id="result"></p>

Co robisz źle? Bindujesz zdarzenie click dla elementu <option>, tymczasem zdarzenie to należy przypisać elementowi <select>.
pehaperowiec
Nadal 0 efektu... napewno Twój zapis jest poprawny ?
rocktech.pl
Witam.

Obserwowanie zdarzenia click na element option nie jest dobrym wyjściem.
Obserwuj zmianę wartości. Tu przykład, że działa http://jsfiddle.net/sGueE/.

[JAVASCRIPT] pobierz, plaintext
  1.  
  2. $(document).ready(function() {
  3.  
  4. $('#what').bind('change', function() {
  5.  
  6. $.get('data.php', { what: $(this).val(); }, function(data) {
  7.  
  8. $('#result').html(data);
  9.  
  10. });
  11.  
  12. });
  13.  
  14. });
[JAVASCRIPT] pobierz, plaintext
pehaperowiec
no i czemu nadal to nie działa ?

BTW. Ja chce przesłać te dane do skryptu PHP i spowrotem je odesłac i umieścić w elemencie #result
rocktech.pl
Powodów może być kilka.

HTML wygląda tak?

  1. <select id="what" name="what">
  2.  
  3. <option value="">wybierz</option>
  4.  
  5. <option value="good">good</option>
  6.  
  7. <option value="bad">bad</option>
  8.  
  9.  
  10. <p id="result"></p>


Sprawdź access_log upewnij się, ze żądanie dochodzi.
No i oczywiście Firebuga albo Dragonfly włączony?
mortus
A załadowałeś jQuery wcześniej? A czy plik jest uruchamiany z serwera www (tzn. poprzez adres w przeglądarce postaci http://localhost/***)? Czy plik data.php znajduje się w tym samym katalogu, co ten fragment HTML-a i JS?

Kolega rocktech.pl ma rację pod względem zdarzenia click. Różnica pomiędzy zdarzeniami jest taka, że przy click trzeba nacisnąć przycisk myszy i wybrać opcję trzymając przycisk myszy wciśnięty. Natomiast obsługa zdarzenia change nie wymaga trzymania wciśniętego przycisku myszy. No i jak same nazwy zdarzeń wskazują click jest wywoływane przy każdym kliknięciu, change przy każdej zmianie wartości (nawet na tę samą).

Jednak kod kolegi rocktech.pl niczego nowego poza zmianą zdarzenia nie wnosi. Oba skrypty są prawidłowe i powinny działać. Dlatego wrzuć to co masz na jsfiddle.net.
pehaperowiec
A załadowałeś jQuery wcześniej?
>>tak

Wywołuje go tak:
http://localhost/n/index.html

Czy plik data.php znajduje się w tym samym katalogu, co ten fragment HTML-a i JS?
>> tak

ale jsfiddle mam przykład w którym nie przekazuje danych do skryptu PHP a ja wlasnie tego chce się nauczyć...

html
Kod
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Untitled Document</title>
    <link rel="stylesheet" type="text/css" href="style.css" media="all">
    <script type="text/javascript" src="jquery.js"></script>
<script>

  $(document).ready(function() {

    $('#what').bind('change', function() {

      $.get('data.php', { what: $(this).val(); }, function(data) {

        $('#result').html(data);

      });

    });

  });


</script>
</head>
<body>
    <select name="what" id="what">
        <option value="">wybierz</option>
        <option value="good">good</option>
        <option value="bad">bad</option>
    </select>
    <p id="result"></p>
</body>
</html>
dta.php
Kod
<?php

echo $_GET['what']

?>
Gdzie jest bład ?
rocktech.pl
Generalnie http://getfirebug.com/javascript.
I uwierz mi nie będziesz już więcej się męczył z takimi błahymi tematami na forum smile.gif.

A błąd jest tu

[JAVASCRIPT] pobierz, plaintext
  1. $.get('data.php', { what: $(this).val(); }, function(data) {
  2. //a ma być
  3. $.get('data.php', { what: $(this).val() }, function(data) {
[JAVASCRIPT] pobierz, plaintext


Pozdrawiam.
pehaperowiec
Czyli średnik...
1) what: $(this).val() <--- chcę przesłac wiecej zmiennych, oddzielac powinenem je przecinkami?
2) Gdzie takie informacje znajde w Firebugu?
3) Jest dostepna polsko języczna wersja?

BTW. Dziekuję za pomoc, już działa smile.gif
rocktech.pl
1. Tak przecinkami wszystko masz tu http://api.jquery.com/jQuery.get/
2. W zakładce skrypty, sieć
3. Tak
pehaperowiec
1) a czemu ten kod nie działa pod IE ?
2) U mnie zakładka skrypt jest neiaktywna, czemu? Trzeba ją jakoś włączyć?

Kod
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Untitled Document</title>
    <link rel="stylesheet" type="text/css" href="style.css" media="all">
    <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript" src="kod.js"></script>
</head>
<body>
    <select name="what" id="what">
        <option value="">wybierz</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
    </select>
    <a href="">1</a>
    <a href="">2</a>
    <a href="">3</a>
    <p id="result"></p>
</body>
</html>

Kod
$().ready(function() {
    $("a").bind({
        click:function() {    
            //alert(parseInt($(this).text()));
            $.get(
                "data.php",
                {
                    id:$(this).text()                
                },
                function(data) {
                    $("#result").html(data);    
                }
            );
        }                
    });
});

Kod
<?php

$id=(int)$_GET['id'];
mysql_connect("localhost","root","") or die("brak połączenia");
mysql_select_db("baza");

$query=mysql_query("select * from tabela where id=".$id);
$res=mysql_fetch_object($query);

echo "id: ".$res->id."<br>Imię: ".$res->imie."<br>Nazwisko: ".$res->nazwisko;

mysql_close();

?>
Za pomocą selecta wybiera mi wartości z bazy a za pomocą kliknięcia w link juz nie. Co sknociłem?
mortus
Odnośniki nie posiadają odpowiedniego adresu, poza tym kliknięcie w odnośnik spowoduje przejście do pliku data.php. A odnośniki powinny wyglądać tak:
  1. <a href="data.php?what=1">1</a> | <a href="data.php?what=2">2</a> | <a href="data.php?what=3">1</a>

Przy czym w tej sytuacji kod PHP powinien się znaleźć w pliku z HTML-em w odpowiednim miejscu (zmienia się również adres w odnośnikach), ewentualnie cały plik powinien być wstawiony w to miejsce, pod warunkiem, że kliknięto odnośnik, czyli:
  1. <a href="plikzhtml.php?what=1">1</a> | <a href="plikzhtml.php?what=2">2</a> | <a href="plikzhtml.php?what=3">1</a>
  2. <p id="result">
  3. <?php
  4. if(isset($_GET['what']) && $_GET['what'] != '') {
  5. include 'data.php';
  6. }
  7. ?>
  8. </p>

Oczywiście o tym, czy plik będzie miał rozszerzenie .php, czy też .html i będzie jednocześnie przetwarzany przez serwer www decyduje konfiguracja tego serwera.
pehaperowiec
działa ale wystarczy zwykłe return false albo event.preventDefault;p

BTW. W dokumentacji jQuery przeczytałem, że zapis $.ajax() jest podobny do $.get() czy też $.post(), więc pisze:
Kod
$("a").bind({
      click:function(s) {  
         //alert($(this).text());
         $.ajax(
            url:"data.php",
            method:"get",
            data:{id:$(this).text()},
            dataType:"html",
            succes: function(data) {
               $("#result").html(data);  
            }
         );
         return false;
      }            
   });
ale kurcze, coś znów sknociłem i nie wiem co;/
nospor
1) Zainstaluj wkońcu tego FIREBUGa to będziesz widział na jakim etapie się wykładasz....
2) w .ajax zrobiłeś literówkę w parametrach. No już mógłbyś się nauczyć używać ctrl+c, ctrl+v ....
http://api.jquery.com/jQuery.ajax/
I sobie przejrzyj jak dokładnie nazywają się parametry, których używasz w .ajax
toaspzoo
$('#id_elem").load('adres_pliku.php');
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.