Himjon Ответов: 2

Как преобразовать извлеченные данные PHP в массив javascript, содержащий целое число


Извлекая данные из mysql и используя их в javascript, вместо массива с целым числом я получаю строку с кавычками вроде этой:

"var latlong = [[38.4870556,68.8065556],[38.7059167,69.2994444]];"


Что я уже пробовал:

Здесь извлечение данных с помощью PHP:
try {
    $db = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password, array(
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
        PDO:: ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
        PDO:: ATTR_ERRMODE => TRUE
    ));

} catch(PDOException $e) {
    die($e->getMessage());
}

$stmt = $db->prepare("SELECT latitude, longitude FROM  hydros WHERE latitude <> 0");
$stmt->execute();

$data = [];

$result = $stmt->fetchAll();
foreach ($result as $row) {
    $data [] = [(float)$row->latitude,(float)$row->longitude];
}

echo "var latlong = " . (!empty($data) ? json_encode($data)  : "]") . ";";


Затем извлечение данных с помощью jQuery
	function latlongc(callback) {
    httpRequest = new XMLHttpRequest();
    httpRequest.onreadystatechange = function () {
        if (httpRequest.readyState === 4) { // request is done
            if (httpRequest.status === 200) { // successfully
                callback(httpRequest.responseText); // we're calling our method
            }
        }
    };
    httpRequest.open('GET', "latlong.php");
    httpRequest.send();
}

	latlongc(function (result) {
    
    latlong1 = result;
    console.log(latlong1);
});

Richard MacCutchan

Посмотрите на последнюю строку вашего php-кода, Вы представляете результат в виде строки.

2 Ответов

Рейтинг:
4

Himjon

Строительство файл GeoJSON, который, чтобы использовать его с помощью JavaScript.

# Build GeoJSON feature collection array
$geojson = array(
   'type'      => 'FeatureCollection',
   'features'  => array()
);

# Loop through rows to build feature arrays
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $properties = $row;
    # Remove long, lat and IFNULL fields from properties (optional)
    unset($properties['IFNULL']);
    unset($properties['longitude']);
    unset($properties['latitude']);
    $feature = array(
        'type' => 'Feature',
        'geometry' => array(
            'type' => 'Point',
            'coordinates' => array(
                (float)$row['longitude'],
                (float)$row['latitude']
            )
        ),
        'properties' => $properties
    );
    # Add feature arrays to feature collection array
    array_push($geojson['features'], $feature);
}

header('Content-type: application/json');

//Building var hydros to add it 
$hydros = "var hydros = ";

//Write to geoJSON file
$fp = fopen('data/hydros.geojson',  'w');
fwrite($fp, $hydros);
fwrite($fp, json_encode($geojson, JSON_UNESCAPED_UNICODE));
fclose($fp);


Затем с помощью массива "var hydros;" в javascript:

<script src="data/hydros.geojson"></script>


Надеюсь, это поможет другим.


Рейтинг:
14

W∴ Balboos, GHB

Глядя на эту последнюю строку php кода:

echo "var latlong = " . (!empty($data) ? json_encode($data)  : "]") . ";";
Предположим, что массив пуст?   Ваш результат будет следующим:
var latlong  = ];
что, очевидно, является ошибкой и может привести к сопутствующим неприятностям в других javascript.

Предположим, что это не так:
Если вы создадите страницу с помощью javaScript до того, как она будет подана, они станут частью страницы. Используйте как обычно.
Однако если вы добавляете javaScript на свою страницу с помощью AJAX, имейте в виду, что новый javaScript может быть фактически недоступен для вашей страницы, если вы просто визуализируете текст.

Предположим, что функция callback() уже существует: Он получает то, что вы ожидаете[^] форма JSON формируется из неассоциативного массива. Под этим я подразумеваю, что у вас нет индексов.

Вы найдете это на связанной странице:
Цитата:
Неассоциативный массив выводится в виде массива: [[1,2,3]]
Вывод неассоциативного массива в виде объекта: {"0":{"0":1,"1":2,"2":3}}


Надеюсь, это поможет вам найти недостающие int (то есть, если я вас правильно понял)


Himjon

Спасибо, вы заставили меня найти правильное решение.

W∴ Balboos, GHB

Не забудьте отметить ответ на вопрос, чтобы внимание можно было уделить в другом месте!

[no name]

спасибо