Я пытаюсь сделать звонок в базу данных и получить "toplist", который ограничен 10 на PHP. Здесь мне нужно создать массив и вернуть его в JQuery с помощью $.get().
Но он не смог получить все данные с помощью этого кода. Как я могу заставить это получить, а затем выполнить "для каждого" в JQuery для всех данных, которые отправляются с PHP?
Jquery:
$.get("core.inc.php?get_toplist=1",
function(data) {
var json = JSON.parse(data);
alert(json['name']);
});
PHP:
if ($_GET['get_toplist']) {
$get_top_list = mysql_query("
SELECT * FROM ".$DBprefix."Submissions
WHERE status='1'
ORDER BY points DESC LIMIT 10");
$i = 0;
$arr = array();
while ($top_list = mysql_fetch_array($get_top_list)) {
$arr[] = array(
'position' => $i++,
'name' => $top_list['name'],
'points' => $top_list['points']
);
}
echo json_encode($arr);
}
Вы возвращаете массив, но ваш Javascript-код обрабатывает его как один элемент. Пытаться:
alert(json[0].name);
Если вы хотите использовать foreach
, вы можете сделать:
$.each(json, function(i, el) {
console.log(el.name + " score is " + el.points);
});
ваш php-код не является правильным
if ($_GET['get_toplist']) {
$get_top_list = mysql_query("
SELECT * FROM ".$DBprefix."Submissions
WHERE status='1'
ORDER BY points DESC LIMIT 10");
$i = 0;
$arr = array();
while ($top_list = mysql_fetch_array($get_top_list)) {
$arr[] = array(
'position' => $i++,
'name' => $top_list['name'],
'points' => $top_list['points']
);
}
}
echo json_encode($arr);
}
просто добавьте '}' перед echo json_encode ($ arr);
также вы получаете изменение массива в alert (json [0] ['name']);
Друг будет вашим json.
[{"position":1,"name":"name1","points":"points"},{"position":2,"name":"name2","points":"points"}, {"position":3,"name":"name3","points":"points"},....]
поэтому вы не можете напрямую обращаться к нему, как ур.
сделайте петлю, затем получите доступ к ней.
$.each(data,function(i,val){
alert(val.name);
});
это сработает.
alert()
json_encode()
, поэтому возвращает JSON. Заголовок не влияет на возвращаемые данные.