1

私は新しいサイトで始めています (それは私の最初のサイトです)、そして私は大きな問題を抱えています! 私はこのコードを書きました

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

4 に答える 4

3

正しい JSON ではありません。要素が次のように角括弧 (配列を示す) で囲まれている場合は、正しいでしょう。

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

最初に配列内の DB からすべての要素を取得してから、この配列をエンコードできます。

$elements = array()

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

echo json_encode($elements);

これは機能するはずです($.getJSON()jQueryで使用)。

更新:.getJSON():

$.getJSON('/path/to/php_file', function(data) {
    // something with data which is of form
    // data = [{'country': '...'}, {...}, ...]
    //e.g.
    alert(data[0].country);
});
于 2010-04-29T16:56:46.347 に答える
1

JSON 文字列は有効な JSON 文字列ではないことに注意してください。出力を生成する直前に、json_encode を 1 回使用することをお勧めします。あなたはおそらくそうするでしょう:

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

それが正しいことを願っています、私はそれをテストしていません:)

于 2010-04-29T17:04:49.757 に答える
0

ループの後、一度エコーしたいと思います。また、配列として渡したい場合は括弧で囲んでください。このようなもの:

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) ] )

「データ」を利用するにはコールバック関数が必要です

于 2010-04-29T16:56:15.457 に答える
0

この方法を試すことができます:

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);
});
于 2010-04-29T16:56:55.283 に答える