Данные MYSQL -> Массивы PHP -> Javascript (или Jquery) Как передать данные с помощью JSON? - PullRequest
1 голос
/ 29 апреля 2010

Я начинаю с нового сайта (это мой первый), и у меня большие проблемы! Я написал этот код

<?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;
    }
?>

и вывод выглядит следующим образом:

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

что должно быть правильным выходом JSON ...

Как я могу получить это сейчас в Jquery? Я пробовал с

$.getJSON 

но я не могу правильно слить его. Я пока не хочу передавать данные в DIV или что-то подобное в HTML.

В качестве обновления работает код Andres Descalzo!

<?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 "]}";
?>

Вывод правильный и выглядит следующим образом:

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

Как я могу использовать $getJSON?

Это нормально, что синтаксис

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

и что URL является вышеупомянутым PHP-файлом, но [data] и функцией обратного вызова?

Ответы [ 4 ]

3 голосов
/ 29 апреля 2010

Это не правильный JSON. Правильно было бы, если бы элементы были заключены в квадратные скобки (обозначая массив) примерно так:

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

Вы можете сначала извлечь все элементы из БД в массиве, а затем закодировать этот массив:

$elements = array()

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

echo json_encode($elements);

Это должно работать (используя $.getJSON() в jQuery).

Обновление: A .getJSON() пример:

$.getJSON('/path/to/php_file', function(data) {
    // something with data which is of form
    // data = [{'country': '...'}, {...}, ...]
    //e.g.
    alert(data[0].country);
});
1 голос
/ 29 апреля 2010

Обратите внимание, строка JSON не является допустимой строкой JSON! Я предлагаю вам использовать json_encode один раз, непосредственно перед выводом. Вы, вероятно, сделаете это:

$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;

Надеюсь, это правильно, я не проверял:)

0 голосов
/ 29 апреля 2010

вы можете попробовать так:

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);
});
0 голосов
/ 29 апреля 2010

Я думаю, вы хотите повторить один раз - после цикла. Кроме того, если вы хотите передать его как массив, заключите его в квадратные скобки. Примерно так:

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

Результат, который вы отправите, будет:

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

Что касается $ .getJSON, как вы это применяете? Синтаксис для getJSON:

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

Вам нужна функция обратного вызова, чтобы использовать 'data'

...