2017-01-20 29 views
1

Я создал простой файл php, который сохраняет данные из MySQL db на 2 массива. Я пытаюсь отправить эти два массива в файл js (который находится отдельно от html-файла). Я пытаюсь изучить AJAX, но, похоже, я не делаю что-то правильно.PHP-массив для разделения файла JavaScript через 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); 
     } 
    }); 
}); 

Я действительно надеюсь, вы понимаете, что я пытаюсь сделать. В чем проблема? Я действительно думал, что это должно сработать, поскольку я прошел через него несколько раз, чтобы сказать меньше всего ...

+0

Какая ошибка? –

+0

Ну, я просто проверяю, записывает ли он в консоли длину массива, но ничего не делает. Я не понимаю, где проблема. Вот в чем проблема :) –

+0

что вы получаете, если 'console.log (data)'? –

ответ

2

Вы не можете использовать 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 автоматически анализирует JSON, когда он устанавливает data. Вы не должны звонить jQuery.parseJSON() или eval().

+0

Я исправил код следующим образом: get.php: $ result = array ('x' => $ x_array, 'y' => $ y_array) echo json_encode ($ result); и файл JS: $ (документ) .ready (функция() { $ .ajax ({ типа: "GET", URL: "get.php", DATATYPE: "JSon", данных: { ничего: 1}, успех: функция (данные) { вар х = data.x; вар у = data.y; console.log (x.length); } }); }); Но он все еще не работает ... –

+0

Извините, это действительно работает !, Спасибо! –