Загрузка данных из MySQL в JavaScript Array of Array с использованием jQuery Ajax

У меня есть PHP и JQuery код, как показано ниже

<script>
$( document ).ready(function() {
  var data =[];
    $("#submit").on("click",function(){
        $.ajax({
                type:"POST",
                url:"map.php",
                success: function (html) {
                    $('#message').html(html);
                }
        });
    });
});
</script> 

PHP

<?php
define ( 'DB_HOST', 'localhost' );
define ( 'DB_USER', 'root' );
define ( 'DB_PASS', '' );
define ( 'DB_NAME', 'test' );
  $con = new mysqli(DB_HOST,DB_USER,DB_PASS,DB_NAME);
  $query = "SELECT x,y FROM app";
  $results = $con->query($query);
  $return = array();
  if($results) {
    while($row = $results->fetch_assoc()) {
      $return[] = array((float)$row['x'],(float)$row['y']);
    }
  }
   echo json_encode($return);
  $con->close();
 ?>

которые возвращают значения из базы данных, как это в $('#message').html(html);

[ [ 20 , 20 ],[ 20 , 30 ],[ 50 , 35 ],[ 40 , 20 ] ]

теперь, пожалуйста, дайте мне знать, как я могу разобрать / экспортировать / отправить этот результат в data =[]; чтобы иметь массив массив там, так что в конечном итоге результат должен выглядеть так:

var data  =[ [ 20 , 20 ],[ 20 , 30 ],[ 50 , 35 ],[ 40 , 20 ] ];

Спасибо

5 ответов

Решение

Включают dataType: 'json'

$.ajax({
     type:"POST",
     url:"map.php",
     dataType: 'json',
     success: function (html) {
         $('#message').html(html);
         data = html;
         console.log(data);
     }
});

Вместо echo json_encode($return); Вы можете использовать echo json_encode(array('data'=>$return)); получить ответ в формате ассоциативного массива.

Противоположность вашей json_encode PHP-функция в JavaScript JSON.parse(json):

var myArr = JSON.parse("[ [ 20 , 20 ],[ 20 , 30 ],[ 50 , 35 ],[ 40 , 20 ] ]");

Вы пытались добавить - "dataType: "json"к вашему вызову ajax... Если вы сделаете это, json_encode в вашем php-скрипте позаботится о возвращении правильной структуры массива.

$.ajax({
            type:"POST",
            url:"map.php",
            dataType: "json",
            success: function (html) {
                $('#message').html(html);
            }
});

Просто сделать

data  = $.parseJSON('[ [ 20 , 20 ],[ 20 , 30 ],[ 50 , 35 ],[ 40 , 20 ] ]');

или же

data = $.parseJSON(html);

ПРИМЕЧАНИЕ: удалите var при назначении массива переменной данных, он назначит массив глобальной переменной данных.

Итак, финальный скрипт будет:

<script>
$( document ).ready(function() {
  var data =[];
    $("#submit").on("click",function(){
        $.ajax({
                type:"POST",
                dataType:'json',
                url:"map.php",
                success: function (html) {
                    $('#message').html(html);
                    data = $.parseJSON(html);
                }
        });
    });
});
</script>
Другие вопросы по тегам