MYSQL Veri ->

4 Cevap php

I am starting with a new site (it's my first one) and I am getting big troubles ! I wrote this code

<?php
    include("misc.inc");
    $cxn=mysqli_connect($host,$user,$password,$database) or die("couldn't connect to server");
    $query="SELECT DISTINCT country FROM stamps";
    $result=mysqli_query($cxn,$query) or die ("couldn't execute query");
    $numberOfRows=mysqli_num_rows($result);

    for ($i=0;$i<$numberOfRows;$i++){
        $row=mysqli_fetch_assoc($result);
        extract($row);
        $a=json_encode($row);
        $a=$a.",";
        echo $a;
    }
?>

aşağıdaki gibi çıktı:

{"country":"liechtenstein"},{"country":"romania"},{"country":"jugoslavia"},{"country":"polonia"},

hangi doğru bir json outout olmalı ...

Onu nasıl jQuery şimdi alabilirim? Ben denedim

$.getJSON 

ama düzgün kaynaştırmak mümkün değilim. Ben henüz bir DIV veya HTML benzer bir şey için veri geçmek istemiyorum.

Bir güncelleme olarak, Andres Descalzo kod çalışır!

<?php
    include("misc.inc");
    $cxn=mysqli_connect($host,$user,$password,$database) or die("couldn't connect to server");
    $query="SELECT DISTINCT country FROM stamps";
    $result=mysqli_query($cxn,$query) or die ("couldn't execute query");
    $numberOfRows=mysqli_num_rows($result);

    echo "{data: [";
    for ($i=0; $i<$numberOfRows; $i++){
        $row=mysqli_fetch_assoc($result);
        extract($row);
        $a = (($i!=0)?",":"") . json_encode($row);
        echo $a;
    }
    echo "]}";
?>

Çıktı doğru ve aşağıdaki gibidir:

{data: [{"country":"liechtenstein"},{"country":"romania"},{"country":"jugoslavia"},{"country":"polonia"}]}

Nasıl kullanabilir $getJSON?

Bu sözdizimi olduğunu Tamam

$.getJSON( url, [ data ], [ callback(data, textStatus) ] )

ve url yukarıda belirtilen PHP dosyası olduğunu ancak [data] ve geri arama işlevi mi?

4 Cevap

Bu doğru JSON değildir. Doğru olurdu, elemanları çok benzeri (bir dizi gösteren) köşeli parantez içine olsaydı:

[{"country":"liechtenstein"},
 {"country":"romania"},
 {"country":"jugoslavia"},
 {"country":"polonia"}]

Önce bir dizi DB tüm öğeleri almak ve sonra bu dizi kodlamak yapabilirsiniz:

$elements = array()

for ($i=0;$i<$numberOfRows;$i++){
        $elements[]=mysqli_fetch_assoc($result);
}

echo json_encode($elements);

Bu ($.getJSON() jQuery kullanarak) çalışmalıdır.

Update: A .getJSON(), örneğin:

$.getJSON('/path/to/php_file', function(data) {
    // something with data which is of form
    // data = [{'country': '...'}, {...}, ...]
    //e.g.
    alert(data[0].country);
});

Pay attention, the JSON string is not a valid JSON string! I suggest you to use json_encode once, just before producing the output. You'd probably do that:

$countries = array();
for ($i=0;$i<$numberOfRows;$i++){
    $row=mysqli_fetch_assoc($result);

    //Not needed, I guess
    //extract($row); 

    $countries[] = $row;

    //More probably, you want to get only the country name
    //$countries[] = $row['country'];
}

$result = json_encode( $countries );
echo $result;

Doğru, umarım bunu test etmedim :)

Döngü sonra - Ben bir kez yankı istiyorum düşünüyorum. Eğer bir dizi olarak geçmek istiyorsanız Ayrıca, parantez ile onu çevreleyen. Böyle bir şey:

for ($i=0;$i<$numberOfRows;$i++){
        $row=mysqli_fetch_assoc($result);
        extract($row);
        $a=json_encode($row);
        $a=$a.",";
    }
echo '['.$a.']';

Eğer gönderme olacağını sonucu olacaktır:

[{"country":"liechtenstein"},{"country":"romania"},{"country":"jugoslavia"},{"country":"polonia"},]

$. GetJSON gelince, nasıl bu uygulamaktayız? GetJSON için sözdizimi şöyledir:

$.getJSON( url, [ data ], [ callback(data, textStatus) ] )

Sen, 'data' kullanımı yapmak için bir geri çağırma işlevi gerekir

Bu şekilde deneyebilirsiniz:

PHP / HTML:

<div id="iddiv">
<?php
    echo "{data: [";
    for ($i=0; $i<$numberOfRows; $i++){
        $row=mysqli_fetch_assoc($result);
        extract($row);
        $a = (($i!=0)?",":"") . json_encode($row);
        echo $a;
    }
    echo "]}";
?>
</div>

Javascript:

$(function(){    
    var p = $.getJSON($("#iddiv").text());
    alert(p[0].country);
});