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 我在控制台上收到此错误。有趣的是,对象就在那里。

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 数组直接放入 score var 中,一切正常。现在调整它以与数据库交互。

非常感谢任何帮助。有点 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

感谢zshooter,您的解决方案以及有关回调函数的更多教育,我让它按我想要的方式工作。将 score_arr 设为全局并根据您的建议进行更改。在这里帮助其他人是有效的代码。

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 回答