Возврат массива PHP в массив Javascript - PullRequest
0 голосов
/ 12 января 2011

Я пытаюсь вернуть свой массив SQL-запросов в массив javascript и затем отображать информацию по одному.Я нашел несколько полезных постов уже здесь, но я все еще не могу заставить его работать.Я новичок в Ajax и поэтому, пожалуйста, прости любые глупые ошибки.Ниже приведен php, за которым следует описание.php: находится во внешнем файле из index.php

<?php
include('connection.php');

$query = "SELECT * FROM photos";
$queryresult = mysql_query($query);

while ( $line = mysql_fetch_array($result) ) {
    $path[] = $row[0];
}
$paths = json_encode($path);
header('Content-type: application/json');
echo $paths;
?>

. Получает массив результатов (это пути к файлам) и json кодирует их для передачи в javascript.Connection.php правильный и работает.

HTML / Javascript:

<html>
<head>
<script src="JavaScript/gjs.js" type="text/javascript"></script>
<script src="jquery/jquery-1.4.3.min.js" type="text/javascript"></script>
<script>
function imageload(){
var i = 1;
$.getJSON('phpfiles/getpiccode.php', function(data) {

    var can = document.getElementById('canvas').getContext('2d');

    $.each(data,function(idx, row){
    var img = new Image();
    img.onload = function(){
        can.drawImage(img, 0, 0, 1280, 800);
    }
    img.src = row;
            i++;
});

});

}
</script>
</head>

<body>
<div class="container">
<canvas id="canvas" class="canvas-one" width="1280" height="800">
<script>imageload();</script>This text is displayed if your browser does not support HTML5 Canvas</canvas>
</div>

</body>
</html>

Надеюсь, это имеет смысл.Еще раз спасибо!

1 Ответ

7 голосов
/ 12 января 2011

Используйте json_encode(), чтобы закодировать его как JSON.В последних браузерах вы можете просто превратить строку из этой функции в объект JavaScript, используя var obj = JSON.parse(yourstring); - но лучше использовать, например, jQuery для анализа AJAX и JSON.

Обновление: ваш JavaScript должен выглядеть так, чтобы перебиратьданные из вашего запроса:

$.getJSON('phpfiles/getpiccode.php', function(data) {
    // get canvas object. it's the same for all images so only do it once
    var can = document.getElementById('canvas').getContext('2d');
    // iterate over the elements in data
    $.each(data, function(idx, row) {
        var img = new Image();
        img.onload = function() {
            can.drawImage(img, 0, 0, 1280, 800);
        }
        img.src = row;
    });
});

Тем не менее, он может не выполнять то, что вы хотите: он будет рисовать все изображения одновременно в одной позиции.

Также заменит <script>imageload() </script> (при условии, что это функция, содержащая ваш JavaScript) с <script type="text/javascript">imageload();</script>, поскольку это правильный / правильный синтаксис.

В вашем PHP-коде вам придется заменить return $paths; на echo $paths;, если вы не используете какой-либо фреймворк, которыйполагается на ваш файл, возвращающий что-то.Кроме того, было бы хорошо отправить JSON-заголовок: header('Content-type: application/json');

PS: SELECT * в сочетании с MYSQL_NUM - это BadThing.Он опирается на столбцы в таблице, имеющие определенный порядок.Если вам нужен только один столбец, используйте «SELECT columnName»;если вам нужно все, используйте MYSQL_ASSOC, чтобы получить ассоциативный массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...