【问题标题】:PHP array to seperate JavaScript file via AJAXPHP数组通过AJAX分隔JavaScript文件
【发布时间】:2017-01-20 19:20:12
【问题描述】:

我制作了一个简单的 php 文件,它将 MySQL db 中的数据保存到 2 个数组中。我正在尝试将这两个数组发送到 js 文件(与 html 文件分开)。我正在尝试学习 AJAX,但似乎我没有做正确的事情。

你能解释一下我做错了什么吗?

我的 php 文件:get.php

<?php
define('DB_NAME', 'mouse');
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_HOST', 'localhost');
$link = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if($link === false){
    die("ERROR: Could not connect. " . mysqli_connect_error());
}else{
   echo 'Successfuly connected to database :) <br/>';
}
$sql = "SELECT x, y FROM mousetest";
$result = mysqli_query($link, $sql);
$x_array = [];
$y_array = [];
if (mysqli_num_rows($result) > 0) {
    while($row = mysqli_fetch_assoc($result)) {
        echo "x: " . $row["x"]. " - y: " . $row["y"]. "<br>";
        array_push($x_array, $row["x"]);
        array_push($y_array, $row["y"]);
    }
} else {
    echo "0 results";
}
echo json_encode($x_array);
echo "<br>";
echo json_encode($y_array);
mysqli_close($link);
$cd_answer = json_encode($x_array);
echo ($cd_answer);
?>

这是我的 JS 文件:

$(document).ready(function(){
    $.ajax({
        type: "GET",
        url: "get.php",
        dataType: "json",
        data : {anything : 1},
        success:function(data){
            var x = jQuery.parseJSON(data); // parse the answer
            x = eval(x);
            console.log(x.length);
        }
    });
});

我真的希望你明白,我想要做什么。哪里有问题?我真的认为这应该可行,因为至少可以说我经历了很多次......

【问题讨论】:

  • 错误是什么?
  • 好吧,我只是检查它是否在控制台中记录了数组的长度,但它什么也没做。我不明白问题出在哪里。这就是问题所在:)
  • console.log(data) 会收到什么?
  • 这个文件和get.php在同一个目录吗?如果不是,您将需要更好的 URL 路径。同样使用done 而不是success 进行回调,请参阅stackoverflow.com/questions/8840257/…
  • 不只是随意回显一些json,还需要返回有效的json。看起来您的输出包括 Successfuly connected to database :) x: " . $row["x"]. " - y: " . $row["y"]. " 和可能的 0 results,它们都不是有效的 json。最重要的是,您然后将两个数组打印为单独的 json 对象,您需要将它们放在一个关联数组中,然后 json 对该数组而不是单独的部分进行编码。

标签: javascript php ajax get


【解决方案1】:

你不能使用echo json_encode(...) 两次。客户端需要一个 JSON 对象,而不是一系列对象。

您应该使每个数组成为包含数组的元素,然后将其作为 JSON 返回。

$result = array('x' => $x_array, 'y' => $y_array);
echo json_encode($result);

然后在您将使用的 jQuery 代码中:

var x = data.x;
var y = data.y;

此外,当您使用dataType: 'json' 时,jQuery 会在设置data 时自动解析JSON。你不应该打电话给jQuery.parseJSON()eval()

【讨论】:

  • 我更正了代码如下: get.php: $result = array('x' => $x_array, 'y' => $y_array) echo json_encode($result);和 js 文件: $(document).ready(function(){ $.ajax({ type: "GET", url: "get.php", dataType: "json", data : {anything : 1}, 成功:function(data){ var x = data.x; var y = data.y; console.log(x.length); } }); });但是还是不行……
猜你喜欢
  • 2015-09-11
  • 2012-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-20
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多