0

jquery を使用して JS アプリを作成します。JSON を使用してデータをスクリプトに取り込むのに本当に問題があります。

次のデータ セットを .php スクリプトで作成します。

<?php
$golfer_id=45;
$score_arr[$golfer_id]["name"]="Dave Curry";
$score_arr[$golfer_id][1]=4;
$score_arr[$golfer_id][2]=3;
$score_arr[$golfer_id][3]=5;
$score_arr[$golfer_id][4]=5;
$score_arr[$golfer_id][5]=5;
$score_arr[$golfer_id][6]=5;
$score_arr[$golfer_id][7]=5;
$score_arr[$golfer_id][8]=5;
$score_arr[$golfer_id][9]=5;

$golfer_id=25;
$score_arr[$golfer_id]["name"]="John Doe";
$score_arr[$golfer_id][1]=2;
$score_arr[$golfer_id][2]=2;
$score_arr[$golfer_id][3]=1;
$score_arr[$golfer_id][4]=5;
$score_arr[$golfer_id][5]=5;
$score_arr[$golfer_id][6]=5;
$score_arr[$golfer_id][7]=5;
$score_arr[$golfer_id][8]=5;
$score_arr[$golfer_id][9]=5;

echo json_encode($score_arr);
?>

最終的に、このデータは mysql クエリから取得されます。

これにより、次が生成されます。

{"45":{"name":"Bob Test","1":4,"2":3,"3":5,"4":5,"5":5,"6":5,"7":5,"8":5,"9":5},"25":{"name":"John Doe","1":2,"2":2,"3":1,"4":5,"5":5,"6":5,"7":5,"8":5,"9":5}} 

このコードを使用しています

<?php
$hole=1;
$gid=$_REQUEST['gid'];

?>
<script type="text/javascript">

gid= <?php echo "$gid"; ?>+0;
hole = <?php echo "$hole"; ?>+0;

score_arr = new Object() ;
var total = new Array() ;

$(document).ready(function(){

// SET the intial values
$("#hole_num").text(hole);

// Get Data from db
$.getJSON("golf_be.php","", function(score_arr){
// score_arr = jQuery.parseJSON(score_arr);  Tried this it didn't work
console.log(score_arr); //uncomment this for debug
}); //End json
$("#score").text(score_arr[gid][hole]); \\ This has an error 
$("#golfer_name").text(score_arr[gid]["name"]);

Firebug の使用 i コンソールにこのエラーが表示されます。興味深いことに、オブジェクトはそこにあります。

TypeError: score_arr[gid] is undefined
[Break On This Error]   

$("#score").text(score_arr[gid][hole]);

golf.php?gid=25 (line 94)

Object { 0={...}, 45={...}, 25={...}}

多くのことを試しましたが、何らかの理由でJSONのオブジェクトがscore_arrに正しく入っていないように見えます。ご覧のとおり、parseJson も試してみましたが、うまくいきませんでした。

いくつかの他の歴史、私は同じスクリプトで php 配列の作成から始めました。php echo を使用して、エンコードされた JSON 配列をスコア変数に直接取得すると、すべてがうまく機能しました。現在、データベースと対話するように調整しています。

どんな助けでも大歓迎です。jQuery と JS の初心者であり、この素晴らしいサイトで答えを探すのに多くの時間を費やしてきましたが、うまくいきませんでした。

4

2 に答える 2

4

次のように、getJSON 呼び出しに渡す関数内にテキストを設定する必要があります。

$.getJSON("golf_be.php","", function(data) {
    $("#score").text(data[gid][hole]);
    $("#golfer_name").text(data[gid]["name"]);
);

これは、getJSON に渡す関数がコールバック関数であり、データが PHP ページから取得された後に実行されるためです。メイン関数で設定されていないコードにあるため、データを含むscore_arr名前のローカルスコープ変数を作成していscore_arrます。これは、getJSON 呼び出しに渡す関数内でのみ使用できます。

于 2012-11-19T18:41:16.883 に答える
0

Thanks zshooter, your solution and a little more edcuation about callback functions I have it working the way I wanted. Made score_arr global and changes you suggested. To help others here is the code that works.

var score_arr  ;
var total = new Array() ;

$(document).ready(function(){

// SET the intial values
$("#hole_num").text(hole);

// Get Data from db
$.getJSON("golf_be.php","", function(data){

console.log(data); //uncomment this for debug

$("#score").text(data[gid][hole]);
$("#golfer_name").text(data[gid]["name"]);
score_arr= data;
}); //End json
于 2012-11-19T19:38:37.107 に答える