Onclick row, show extra database data in div.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Fabian W

Fabian W

07/03/2015 16:24:21
Quote Anchor link
Ik heb een database met allerlei hitlijst data over een nummer. Ik wil niet alle data in een tabel zetten, maar de meeste data pas ophalen als er op een bepaald nummer wordt geklikt (tabel row). In een div op de pagina moet dan meer data over dat bepaalde data verschijnen. Hieronder leg ik het met afbeeldingen nog een keer uit.

Huidig: Afbeelding
Gewenst: Afbeelding

Kan iemand me hierbij helpen? Ik vind het behoorlijk lastig om dynamisch data uit de database te halen en dit met een javascript functie (waarschijnlijk) te linken aan de user-interface.

Ik heb een database die uit de volgende twee tabellen bestaat:

songs:
ID (PK, A_I)
Title
Artist
Image

pchart:
ID (PK, A_I)
Rank
Jaar
Week
ID_Songs (komt overeen met songs.ID bij een joint)

Dit is hoe ik nu gegevens uit de database haal, maar zoals gezegd wil ik dus niet alle data in een keer showen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
$sql
= "SELECT c.songid, s.title, s.artist, s.image, c.rank this_week, COALESCE(p.rank, '---') last_week,
COUNT(g.rank) total_weeks, MIN(g.rank) peak_position, (41 * COUNT(g.rank)-SUM(g.rank)) points
      FROM pchart c
      JOIN songs s
          ON c.songid = s.id
      LEFT JOIN pchart p
          ON c.songid = p.songid AND p.week="
.$last_week." AND p.year=".$last_year."
      LEFT JOIN pchart g
          ON c.songid = g.songid
      WHERE
          c.week= "
.$this_week." AND c.year= ".$this_year."
      GROUP BY this_week, c.songid, s.title, s.artist, last_week
      ORDER BY this_week"
;

//$con == connection, $sql = sql query
      $mysqli = mysqli_query($con, $sql);
      
      // output the sql table
      while($row = mysqli_fetch_array($mysqli)) {
        $x++;
        $color = ($x%2 == 0)? 'row1': 'row2';
        echo "<tr id='$color'>";
            echo "<td id='vw'>" . $row['this_week'] . "</td>";
            echo "<td id='vw'>" . $row['last_week'] . "</td>";
            echo "<td id='pic'><img src='" . $row["image"] . "' width='50px' height='50px'></td>";
            echo "<td id='song'>" . $row['artist'] . "</td>";
            echo "<td id='song'>" . $row['title'] . "</td>";
            echo "<td id='wk'>" . $row['peak_position'] . "</td>";
            echo "<td id='wk'>" . $row['total_weeks'] . "</td>";
            echo "<td id='wk'>" . $row['points'] . "</td>";
        echo "</tr>";
      }

      echo "</tbody></table>";
      }

      mysqli_close($con);
      
?>
Gewijzigd op 07/03/2015 16:25:12 door Fabian W
 
PHP hulp

PHP hulp

23/12/2024 07:15:17
 
Thomas van den Heuvel

Thomas van den Heuvel

07/03/2015 17:21:15
Quote Anchor link
Het is in wezen simpel:
Als je ergens overheen hovert (misschien met een bepaalde timeout) moet er extra informatie opgehaald worden. Dit kan JSON zijn, of HTML, of wat dan ook. Wat belangrijk is, is dat je op een of andere manier kunt bepalen *welke* informatie je precies op wilt halen.

Hierbij hoef je het wiel niet (helemaal) opnieuw uit te vinden. Je kunt bijvoorbeeld jQuery gebruiken om het volgende te maken: indien je over een (collectie van) element(en) hovert, pluk je informatie uit dit element (bijvoobeeld een song-id), en deze gebruik je om hier via een AJAX-call een scriptje aan te spreken dat je meer informatie teruggeeft over dit song-id. Vervolgens kun je deze informatie (zoals eerder aangegeven, dit kan van alles zijn) ergens neerplakken of tonen. Ik denk dat het meeste werk nog zit in de grafische afwerking van dit alles.

Het klinkt alleen niet alsof je al veel met jQuery gewerkt hebt.
 
Fabian W

Fabian W

07/03/2015 23:07:52
Quote Anchor link
Ik heb idd weinig met jquery nog gewerkt, maar het meeste moet lukken ;-)

Eerste stap die ik maak is het verzamelen van de data in arrays.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
while($row = mysqli_fetch_array($mysqli)) {
$x++;
$this_week[$x] = $row['this_week'];
$last_week[$x] = $row['last_week'];
$artist[$x] = $row['artist'];
$title[$x] = $row['title'];
$image[$x] = $row['image'];
$peak_position[$x] = $row['peak_position'];
$total_weeks[$x] = $row['total_weeks'];
$points[$x] = $row['points'];
}

?>

Tweede stap die ik maak is het omzetten van php data naar javascript.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<script type="text/javascript">
  var this_week = <?php echo json_encode($this_week) ?>;
  var last_week = <?php echo json_encode($last_week) ?>;
  var artist = <?php echo json_encode($artist) ?>;
  var title = <?php echo json_encode($title) ?>;
  var image = <?php echo json_encode($image) ?>;
  var peak_position = <?php echo json_encode($peak_position) ?>;
  var total_weeks = <?php echo json_encode($total_weeks) ?>;
  var points = <?php echo json_encode($points) ?>;

  alert(title[16]);  
  alert(this_week[16]);
</script>

In stap 2 zie ik meteen dat er een probleem opgetreden is al bij stap 1. Waar de title nog prima wordt opgeslagen, wordt this_week[16] opgeslagen als "1" ipv "16". 32 wordt bijvoorbeeld opgeslagen als 3. Wat is de oorzaak hiervan?
Gewijzigd op 07/03/2015 23:08:39 door Fabian W
 
Thomas van den Heuvel

Thomas van den Heuvel

08/03/2015 00:10:20
Quote Anchor link
Dit gaat niet werken in combinatie met een AJAX-call denk ik. Wat je in je AJAX-call onder andere aangeeft is het type data wat je terugverwacht. Dit doe je met de dataType parameter, en kan bijvoorbeeld JSON zijn. Maar dan moet de "response" enkel JSON bevatten, en geen script-tags of wat dan ook.

Stel dat je via je AJAX call script.php aanroept (met een aantal parameters die aangeven welke informatie je nodig hebt uiteraard), dan moet je op de volgende manier je response opstellen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
// verzamel je data in $data (een array van arrays)
// ...
// verstuur je antwoord op de goede manier

header('Content-Type: application/json; charset=UTF-8');
echo json_encode($data);
?>


Wat je ook zou kunnen doen is de HTML-output rechtstreeks genereren als "response". In je dataType parameter vul je dan 'html' in. Dat lijkt mij in dit geval een stuk makkelijker? Anders moet je met die JSON via JavaScript allerlei HTML gaan opbouwen ofzo? Dat kan ook direct. En in je AJAX-call geef je vervolgens aan waar je de HTML moet neerploppen.
 
Fabian W

Fabian W

08/03/2015 18:07:14
Quote Anchor link
Die laatste methode lijkt mij ook makkelijker, maar heb geen idee hoe ik dat moet aanpakken. Weet jij dat misschien?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

09/03/2015 09:39:59
Quote Anchor link
Een voorbeeldje zal helpen.

index.php (of wat dan ook)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>AJAX met JSON</title>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    </head>
    <body>
        <button type="button" id="knop">Haal de data op</button>
        <div id="resultaat"></div>
        <script>
            $( document ).ready(function() {
                $('#knop').click(function(e) {
                    $.ajax({
                        type: "GET",
                          url: "artist-json.php",
                          data: { id: 3 },
                        dataType: "json"
                    })
                    .done(function( data ) {
                        if(data.status == 'error')
                            alert(data.error);
                        else
                            $('#resultaat').append(data.artist + '<br>' + data.title + '<br><br>');
                    });
                });
            });
        </script>
    </body>
</html>


artist-json.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php

// Laat de browser netjes weten dat het JSON is
header('Content-Type: application/json');

// enige verplichte GET variabele is id.
if(isset($_GET['id']) === FALSE)
{

    echo json_encode(array(    'status' => 'error',
                            'error' => 'Geen GET variabele met id gekregen.'));
    exit;
}


// default antwoord
$data = array(
    'status' => 'error',
    'error' => 'niet gevonden.'
);

// Als id=3 dan hebben we een track gevonden
if($_GET['id'] == 3)
{

    $data = array(
        'status' => 'ok',
        'id' => 3,
        'artist' => 'Jan Smit',
        'title' => 'Als je lacht'
    );
}


// echo de json string
echo json_encode($data);

?>


je kunt ook proberen te bekijken in je browser:

artist-json.php
artist-json.php?id=2
artist-json.php?id=3
 
Thomas van den Heuvel

Thomas van den Heuvel

09/03/2015 13:37:12
Quote Anchor link
Maar dan met dataType 'html' en een PHP-file die een lap HTML produceert.
 
Fabian W

Fabian W

10/03/2015 18:55:33
Quote Anchor link
Thanks guys! Dan heb ik hier de matrix 'data' (8x40). Hoe krijg ik die naar artist-json.php getransporteerd, zodat ik hem daar kan json_encoden?

index.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
while($row = mysqli_fetch_array($mysqli)) {
$x++;
$this_week[$x] = $row['this_week'];
$last_week[$x] = $row['last_week'];
$artist[$x] = $row['artist'];
$title[$x] = $row['title'];
$image[$x] = $row['image'];
$peak_position[$x] = $row['peak_position'];
$total_weeks[$x] = $row['total_weeks'];
$points[$x] = $row['points'];
}

$data = array($this_week, $last_week, $artist, $title, $image, $peak_position, $total_weeks, $points);
echo $data[3][16];
?>
 
Frank Nietbelangrijk

Frank Nietbelangrijk

10/03/2015 19:38:46
Quote Anchor link
Jij maakt van iedere kolom een aparte array. Dat kan veel makkelijker:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
while($row = mysqli_fetch_array($mysqli)) {
    $data[] = $row;
}

print_r($data);

echo $data[16]['artist'];

?>


Even een vraagje: Wil je met de json één hit teruggeven of een lijst met hits?

Toevoeging op 10/03/2015 19:52:59:

Als je alle hits wil teruggeven doe je zoiets:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php

// Laat de browser netjes weten dat het JSON is
header('Content-Type: application/json');

// default antwoord
$data = array(
    'status' => 'error',
    'error' => 'niets gevonden.'
);

$list = array();

// vergeet niet mysql_connect() aan te roepen!
$sql = "SELECT * FROM hits";
$result = mysqli_query($con, $sql);
if($result) {
    while($row = mysqli_fetch_assoc($result))
    {

        $list[] = $row;
    }
}


// Als er items in de array 'list' staan
if(count($list))
{

    $data = array(
        'status' => 'ok',
        'list' => $list
    );
}


// echo de json string
echo json_encode($data);

?>


en stukje javascript:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
// ....
.done(function( data ) {
    if(data.status == 'error')
        alert(data.error);
    else {
        for(var i = 0 ; i < data.list.length ; i++) {
            $('#resultaat').append(data.list[i].artist + '<br>' + data.list[i].title + '<br><br>');
        }
    }
});
Gewijzigd op 10/03/2015 19:54:05 door Frank Nietbelangrijk
 
Fabian W

Fabian W

10/03/2015 21:24:14
Quote Anchor link
Het plan is dat ik de main table met de hele top 40 en de sidebar met extra info over een nummer (row onclick) op dezelfde pagina wil weergeven, met het form ook ergens in een div.

Ik weet niet hoever we al in de richting komen, maar dit is zo'n beetje wat ik nu dan heb:
index.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
       <div id="content_changing_select_tag">
      <form  id="access_database" method="POST" action="artist-json.php">
        <select id="week1" name="week1"><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option><option value="19">19</option><option value="20">20</option><option value="21">21</option><option value="22">22</option><option value="23">23</option><option value="24">24</option><option value="25">25</option><option value="26">26</option><option value="27">27</option><option value="28">28</option><option value="29">29</option><option value="30">30</option><option value="31">31</option><option value="32">32</option><option value="33">33</option><option value="34">34</option><option value="35">35</option><option value="36">36</option><option value="37">37</option><option value="38">38</option><option value="39">39</option><option value="40">40</option><option value="41">41</option><option value="42">42</option><option value="43">43</option><option value="44">44</option><option value="45">45</option><option value="46">46</option><option value="47">47</option><option value="48">48</option><option value="49">49</option><option value="50">50</option><option value="51">51</option><option value="52">52</option></select>
        <select id="year1" name="year1"><option value="2015">2015</option><option value="2014">2014</option><option value="2013">2013</option></select>
        <input id="go_button" name="formsubmit" type="submit" value="Go"/>
      </form>
      </div>

      <div id="container">
        <div id="chartlist"></div>
      </div>
      
  <script type="text/javascript">
  $(document).ready(function() {
    $('#go_button').click(function(e) {
      $.ajax({
        'type': "GET",
        'url': "artist-json.php",
        'dataType': "json",
        'error': function(xhr, status, error){ alert(error.message); },
        'success': jsonParser1 // call function
      }); // $.ajax  
    })
  });    
    
function jsonParser1(json)
{
  HTML = "<table id='chart'> <thead> <tr id='row1'> <th id='vw'>dw</th> <th id='vw'>vw</th> <th id='pic'></th> <th id='song'>artiest</th> <th id='song'>titel</th> <th id='wk'>hp</th> <th id='wk'>wk</th> <th id='wk'>pts</th> </tr> </thead> <tbody>";
  var x=json.list;
  for (i=0;i<x.length;i++)
    {
    HTML += "<tr id='row1'><td id='vw'>";
    HTML += x[i].this_week;
    HTML += "</td><td id='vw'>";
    HTML += x[i].last_name;
    HTML += "</td><td id='pic'><img src='";
    HTML += x[i].image;
    HTML += "' width='50px' height='50px'></td><td id='song'>";
    HTML += x[i].artist;
    HTML += "</td><td id='song'>";
    HTML += x[i].title;
    HTML += "</td><td id='wk'>";
    HTML += x[i].peak_position;
    HTML += "</td><td id='wk'>";
    HTML += x[i].total_weeks;
    HTML += "</td><td id='wk'>";
    HTML += x[i].points;
    HTML += "</td></tr>";
    }
  HTML += "</tbody></table>";
  document.getElementById("chartlist").innerHTML = HTML;
}     
  </script>


artist-json.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?php
// Laat de browser netjes weten dat het JSON is
header('Content-Type: application/json');

// if form is submitted
if($_POST['formsubmit'] == "Go")  {

  // form variables  
  $this_year = $_POST['year1'];
  $this_week = $_POST['week1'];
  
  if ($_POST['week1'] == 1) {
      $last_year = $_POST['year1'] - 1;
      $last_week = '(SELECT MAX(week) FROM pchart WHERE year = ' . $last_year . ')';
  }

  else {
        $last_year = $_POST['year1'];
      $last_week = $_POST['week1'] - 1;
  }

  
  // sql query
  $sql = "SELECT c.songid, s.title, s.artist, s.image, c.rank this_week, COALESCE(p.rank, '---') last_week, COUNT(g.rank) total_weeks, MIN(g.rank) peak_position, (41 * COUNT(g.rank)-SUM(g.rank)) points
  FROM pchart c
  JOIN songs s
      ON c.songid = s.id
  LEFT JOIN pchart p
      ON c.songid = p.songid AND p.week="
.$last_week." AND p.year=".$last_year."
  LEFT JOIN pchart g
      ON c.songid = g.songid
  WHERE
      c.week= "
.$this_week." AND c.year= ".$this_year."
  GROUP BY this_week, c.songid, s.title, s.artist, last_week
  ORDER BY this_week"
;
  
  // Create connection
  $con = mysqli_connect("lalalalala");
  
  // Check connection
  if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

         
  //$con == connection, $sql = sql query
  $mysqli = mysqli_query($con, $sql);

  // save query in array 'data'
  while($row = mysqli_fetch_array($mysqli)) {
      $data[] = $row;
  }
  
  
  mysqli_close($con);
}

  
// Als er items in de array 'data' staan
if(count($data)){
    $list = array(
        'status' => 'ok',
        'list' => $data
    );
}

else  {
    $list = array(
      'status' => 'error',
      'error' => 'niets gevonden.'
    );
}


// echo de json string
echo json_encode($list);
?>


Wat ik krijg te zien als ik op 'go' druk is het json file (ipv een html table) en daarvoor nog een alert met 'undefined'. Verder geeft de console aan dat hij een ander MIME type verwacht dan application/json.

Waar zit de fout?
Verder vind ik je korte stukje van het maken van de data array wel heel leuk eigenlijk. :-)
Gewijzigd op 11/03/2015 22:56:01 door Fabian W
 
Fabian W

Fabian W

18/03/2015 20:39:07
Quote Anchor link
Maar goed, weet iemand hoe ik 'row onclick' data kan ophalen uit de database??
 
Thomas van den Heuvel

Thomas van den Heuvel

18/03/2015 21:01:24
Quote Anchor link
Toegegeven, ik heb het voorgaande niet heel grondig doorgenomen, maar ik denk dat je twee dingen verwart.

In het kort: het idee van AJAX-calls is meestal het ophalen of wegschrijven van data op de achtergrond, zonder dat je van de huidige pagina wegnavigeert.

In jouw geval wil je volgens mij twee dingen:
1. enerzijds wil je een lijst met algemene informatie van artiesten/nummers uit een bepaalde periode
2. anderzijds wil je gedetailleerde informatie wanneer je op een artiest/nummer klikt

In het eerste geval ververs je telkens je pagina waarin je periode X toont - dit is een compleet HTML-document dat gegenereerd wordt door een script. Dit op grond van een "normale HTTP request".

In het tweede geval laad je (op de achtergrond, na een klik) een snippet JSON/HTML in die je invoegt in een gefloate div oid in de huidige pagina. Dit is een AJAX request.

Maar nu heb je nummertje #1 deels overgeheveld naar een AJAX-request. Wil je je hele applicatie opzetten middels AJAX-calls, of alleen het ophalen van extra info waar je het in je oorspronkelijke bericht over hebt want ik denk dus dat er nu wat dingen door elkaar gaan lopen.

EDIT: en als je het eerste wilt (alles via AJAX calls) dan moet je zorgen dat:
- je niet wegnavigeert van de huidige pagina, zoals je nu wel doet
- je alle informatie doorgeeft aan het script wat de AJAX call afhandelt, op dit moment geef je geen data door via de AJAX-call (het "data" attribuut ontbreekt volledig in je AJAX call, je vraagt dus informatie op zonder dat je aangeeft wat je zoekt)
- de methode in overeenstemming is met wat het afhandelscript verwacht te ontvangen, de methode in je call is GET, terwijl het afhandelscript POST verwacht
Gewijzigd op 18/03/2015 21:15:41 door Thomas van den Heuvel
 
Fabian W

Fabian W

18/03/2015 21:14:51
Quote Anchor link
Het belangrijkste voor mij is gewoon dat het geheel werkt. Kortaf gezegd: maakt niet uit hoe.
Ik wil iig uitvogelen hoe ik data onclick kan ophalen.

Edit: Als ik niet wil weg navigeren van de pagina kan ik dus geen json_encode gebruiken.
Gewijzigd op 18/03/2015 21:17:07 door Fabian W
 
Thomas van den Heuvel

Thomas van den Heuvel

18/03/2015 21:23:19
Quote Anchor link
Het klinkt misschien flauw, maar ik denk dat het eerst zaak is dat je een aanpak kiest, voor zowel (1) het genereren van de lijsten en (2) voor het ophalen van de details. Dit zijn twee verschillende dingen die je hier probeert te combineren.

(1) kan prima zonder AJAX/jQuery / de hele rataplan
(2) is AJAX beter geschikt

Ik weet op dit moment niet wat je wilt, en kan je dus ook niet helpen.

Besluit WAT je wilt doen, dan kunnen we helpen met het HOE.

EDIT: naar mijn mening gaf Frank hierboven best een aardige voorzet. Vervolgens zul je de eindjes een beetje aan elkaar moeten knopen. Je zou bijvoorbeeld je buttons kunnen voorzien van een data-attribuut die een artiest-id bevat. Vervolgens geef je die knoppen een klasse en definieer je een onclick-event voor wanneer er op knoppen van die klasse geklikt wordt waarbij het artiest-id uit de knop gevist wordt om de gewenste informatie op te halen.
Gewijzigd op 18/03/2015 21:38:31 door Thomas van den Heuvel
 
Fabian W

Fabian W

18/03/2015 21:35:09
Quote Anchor link
Je hebt daar een goed punt.
Het plan is om de basistabel zo te laten als die eerst was (bovenaan de pagina).
De sidebar met extra info gaan we via Ajax ophalen.
 
Thomas van den Heuvel

Thomas van den Heuvel

18/03/2015 21:54:04
Quote Anchor link
Kun je iets met de bovenstaande edit? Je moet als je op een "meer info" knop drukt op een of andere manier de benodigde informatie doorsluizen naar het script dat de AJAX-request afhandelt. Deze informatie kun je "in" de knop stoppen met data-... attributen.

Heel kort door de bocht:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
...
artiest - nummer <button type="button" class="moreinfo" data-song="1">info</button>
artiest - nummer <button type="button" class="moreinfo" data-song="2">info</button>
artiest - nummer <button type="button" class="moreinfo" data-song="3">info</button>
...


En vervolgens een click-event wat hierop acteert:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<script type="text/javascript">
//<![CDATA[
$().ready(function() {
    $('button.moreinfo').click(function(e) {
        // de knop heeft verder geen effect
        e.preventDefault();
        // peuter data uit knop
        var song = $(this).attr('data-song');
        // paas deze data door aan je AJAX-call
        $.ajax({
            'method': 'GET', // controleer in het script dus op $_GET
            'url': 'ajaxGetSong.php', // naam van script voor afhandeling verzoek
            'data': {'id': song }, // controleer dus op $_GET['id']
            'dataType': 'json', // vertel wat voor datatype je terugverwacht
            'success': function(data) {
                // code die (in dit geval) JSON-data verder verwerkt
                // ...
            }
        });
    });
});
//]]>
</script>


Noot: deze code verder niet getest, maar dit is het idee. En bijna een kopie van wat Frank al had denk ik.
 
Fabian W

Fabian W

18/03/2015 23:12:51
Quote Anchor link
Hoe geef ik het juiste ID mee?

Dit is mijn succes functie:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function jsonParser1(data)
{
    HTML = "<img src='";
    HTML += data.list.image;
    HTML += "' width='50px' height='50px'><br>Artiest: ";
    HTML += data.list.artist;
    HTML += "<br>Titel: ";
    HTML += data.list.title;
    HTML += "<br>Hoogste plaats: ";
    HTML += data.list.peak_position;
    HTML += "<br>Aantal weken: ";
    HTML += data.list.total_weeks;
    HTML += "<br>Aantal punten: ";
    HTML += data.list.points;
    
    document.getElementById("sidebar").innerHTML = HTML;
}


Wat html als output geeft is:
Artiest: undefined
Titel: undefined
etc
 
Thomas van den Heuvel

Thomas van den Heuvel

18/03/2015 23:41:16
Quote Anchor link
Dat beschrijf ik hierboven... lees de reacties in deze thread nog eens goed door zodat je een beter beeld krijgt van hoe PHP-scripts onderling communiceren (data uitwisselen) via AJAX-requests...

Het juiste id geef je mee... door het juiste id op te geven... en het juiste id uit te lezen...

Hierboven staat (wederom) haast stap voor stap uitgelegd hoe dit moet.

Het enige wat jij hoeft te doen is die laatste paar denkstappen volgen en dan ben je er.
 
Fabian W

Fabian W

20/03/2015 22:34:59
Quote Anchor link
Je geeft een aantal hints als 'controleer dus op $_GET['id']'

Maar hoe komt ajaxGetSong.php er dan uit te zien?
Iets als dit? Ik heb letterlijk 0 ervaring met het meegeven van data via ajax.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
if ($_get['id'] = $song){
    $list = array(
        'status' => 'ok',
        'list' => $song
    );
}

else  {
    $list = array(
      'status' => 'error',
      'error' => 'niets gevonden.'
    );
}


// echo de json string
echo json_encode($list);
?>
 
Thomas van den Heuvel

Thomas van den Heuvel

21/03/2015 00:59:13
Quote Anchor link
Via de "data" parameter geef je informatie door in de AJAX-call.

De data is bijvoorbeeld: {'id': <een getal>}

In combinatie met de "method" GET en de "url" "ajaxGetSong.php" wordt de uiteindelijke aanroep dus:
ajaxGetSong.php?id=<een getal>

GET geeft aan dat de parameters in de URL worden doorgegeven.

Daarna is het in dit script "business as usual": je leest het id weer uit via $_GET['id'] zoals je in een normaal PHP-script zou doen. Het enige waar je bij dit "AJAX script" op moet letten is dat je informatie in het formaat teruggeeft wat je in de "dataType" parameter definieert.

Is je dataType 'json', retourneer dan JSON. Concreet output je JSON-geencodeerde data in je AJAX-script die de AJAX-call weer als input voert aan je "success" functie.

Is je dataType 'html', zorg dan dat je in je AJAX-script HTML naar het scherm stuurt. Deze HTML pikt je AJAX-call weer op als input in je "success" functie.

In beide gevallen wordt de "reactie" (de output van het AJAX-script) uitgelezen en weer teruggekoppeld aan de AJAX-call. Deze "response" is beschikbaar middels de "data" parameter in je success functie, die vervolgens binnen deze "callback" functie deze reactie weer verder kan verwerken.

En als je 'method' POST is dan lees je op soortgelijke manier data in je AJAX-script uit via... $_POST.

Ik hoop dat het zo een beetje duidelijk is.
Gewijzigd op 21/03/2015 01:12:41 door Thomas van den Heuvel
 
Fabian W

Fabian W

21/03/2015 11:47:25
Quote Anchor link
We zijn nu al twee weken bezig met dit scriptje en volgens mij weet jij vanaf dag 1 al hoe het php- en javascript file er uit moeten komen te zien. Ik vind het prima dat je niet meteen het antwoord geeft en mij er zelf op probeert te laten komen. Maar je hoeft van mij echt niet meer het verschil tussen json & html of get & post uit te leggen hoor. ;-) Uiteindelijk schiet ik weinig op met je laatste reactie, want ik heb nog steeds geen idee wat ik fout doe in mijn laatste scriptjes. klopt deze regel?: $_get['id'] = $song. Is de variabele die je meegeeft met ajax een php variabele $song of $id of wat anders?
Kun je alsjeblieft iets meer concreet zijn?
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.