【问题标题】:Get MySql data and store it into Javascript array获取 MySql 数据并将其存储到 Javascript 数组中
【发布时间】:2013-05-16 10:04:52
【问题描述】:

想要从 Mysql 中检索记录数据并将其存储到 Javascript 数组中,以便采用这种格式的 heatmap.js 地图数据:

var testData = {max: 46, data: [{lat: 33.5363, lon:-117.044, value: 1},{lat: 33.5608, lon:-117.24, value: 1},..]};

现在我被困在这里,我不知道如何从 Jquery 连接到我的 var testData = new Array();,我应该如何解决这个问题?

(更新的正确代码)

get_query.php

<?php
require_once('./db_con.php');
$dbcon=new db;


$query="SELECT (SELECT geo_lat FROM fun WHERE created_at <= DATE_SUB(NOW(), interval 1   minute) AS geo_lat," . 
       "(SELECT geo_long FROM fun WHERE created_at <= DATE_SUB(NOW(), interval 1 minute) AS geo_long";

$result = mysqli_query($dbcon,$query);
$data = array(); 

    while($row= mysqli_fetch_assoc($result)){

     $data[] = array("lat"=>$row["geo_lat"], "lon"=>$row["geo_long"], "value"=>1); 
     $post_data = json_encode(array('max' => 46, 'data' => $data));
    }
    echo $post_data;
 ?>

my_data.js 基于here:

jQuery.extend({
getValues: function(url) {
    var result = null;
    $.ajax({
        url: url,
        type: 'get',
        dataType: 'json',
        async: false,
        success: function(data) {
            result = JSON.stringify(data);
        }
    });
   return result;
}
});

var testData = $.getValues("get_query.php");

感谢 Orangepill 和 Chrislondon。

【问题讨论】:

  • while(true){ ?
  • 你为什么有while(true){
  • json_encode 应该只被调用一次,在最后,一旦数组按照你想要的方式构建。
  • 您是否正在尝试创建连续的数据馈送?
  • 抱歉打错行了,我已经更新了。

标签: php jquery mysql


【解决方案1】:
while($row= mysqli_fetch_assoc($dbcon,$result)){
    $data[] = array("lat"=>$row["geo_lat"], "lon"=>$row["geo_long"], "value"=>1);
}
echo json_encode($data);

应该能得到你想要的东西。为 json_encode 构建数据时,只需使用原生 php 类型而不是 json,让 json_encode 来处理

【讨论】:

  • 谢谢,当我执行php脚本时,页面结果是'[]',这是正确的吗?对不起,我缺乏知识。
  • 当我添加 'echo $data;'在代码的末尾,我得到了“PHP 警告:mysqli_query() 需要参数 1”和“PHP 警告:mysqli_fetch_assoc() 只需要 1 个参数”。
【解决方案2】:

所以您的问题是如何将您的 jQuery 连接到您的 var data,这样我就不会涉及您的 PHP 代码中的无数问题。在您的成功函数中,您可以像这样设置var data

var data = new Array();

$(function() {
    $.ajax({
        type:     "post",
        url:      "get_query.php",
        data:     $(this).serialize(),
        dataType: "json"
}).done(function(response) {
    data = response;
});

【讨论】:

  • 嗨,克里斯,如何测试这段代码,我已经用 heatmap.js 实现了,但它仍然不起作用。
  • 我之前没有使用 heatmap.js,但是看看他们的代码尝试这样做:heatmap.store.setDataSet(response);在 done 函数内部。
  • 似乎代码不起作用,因为 var 数据导致 json 数据中的双引号 {"lat":"-6.92015","lon":"107.67024","value":1}。我怎样才能删除它?
  • 嗯...也许在你的 php 中试试这个: $data[] = array("lat"=>(float)$row["geo_lat"], "lon"=>(float) $row["geo_long"], "value"=>1)
  • 谢谢,它可以工作,但我的 json 仍然没有存储在 javascript 变量中,需要解析吗?我真的很困惑使用 jquery-AJAX,我没有收到任何数据和错误。
【解决方案3】:

您的 json 似乎不正确:

var testData = {max: 46, data: [{lat: 33.5363, lon:-117.044, value: 1},{lat: 33.5608, lon:-117.24, value: 1},..]};

应该在键周围加上引号

var testData = {"max": 46, "data": [{"lat": 33.5363, "lon":-117.044, "value": 1},{"lat": 33.5608, "lon":-117.24, "value": 1},..]};

由于您在 php 中使用 json_encode(),我会假设 PHP 输出正确。但也许您现在只是使用固定(错误)字符串进行测试?

【讨论】:

    猜你喜欢
    • 2019-12-03
    • 2017-04-21
    • 2016-01-08
    • 2018-03-06
    • 1970-01-01
    • 2019-12-22
    • 2020-01-25
    • 2011-10-10
    • 1970-01-01
    相关资源
    最近更新 更多