Динамическое создание индекса JSON не позволит мне получить доступ к данным в - PullRequest
0 голосов
/ 03 августа 2010

Я пытаюсь использовать jQuery для отправки ajax-запроса на очень простой PHP-скрипт для загрузки изображений для цикла jQuery-плагина.У меня проблема с получением исходных строк изображения из моего объекта json.Я покажу свой код, а затем более подробно расскажу ниже:

<!doctype html>
<html lang="en-us">
    <head>
        <title>jQuery Cycle test</title>
        <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
        <script type="text/javascript" src="js/jquery.cycle.all.min.js"></script>
        <style>
            #slideshow a { margin: 0; padding: 0; color: #fff; }
        </style>
    </head>

    <body>
        <div id="slideshow">
        </div>
    </body>

    <script type="text/javascript">
        $.get('slideshow.php', {start : "true"}, function(data){
            var images = JSON.parse(data);
            for(var i = 1; i < 6; ++i){
                var index = 'image' + i; alert(index); alert(images.index);
                $('#slideshow').innerHTML += '<a href="images/' + images.index + '"><img src="images/' + images.index + '" alt="" /></a>';
            }
        });

        $('#slideshow').cycle({
            fx: 'cover',
            direction: 'right',
            timeout: 3000,
            speed: 300
        });
    </script>

</html>

Мой PHP-скрипт возвращает ассоциативный массив json_encoded, который после кодирования становится обычным объектом json.Для моего теста у меня есть пять изображений, которые я пытаюсь загрузить: image1 - image5.Как вы можете видеть в моем JavaScript, я пытаюсь динамически создать новое имя индекса / свойства для доступа к этим отдельным строкам исходного изображения, добавляя значение 'i' к строке 'image'.Все прямо вперед.

Моя проблема в том, что когда я создаю имена своих свойств таким образом, он возвращает «неопределенное».Когда я пытаюсь сделать это вручную, написав что-то вроде images.image3, он возвращает правильную исходную строку.

Я предупредил свои динамические индексы (как вы можете видеть), и они выглядят хорошо сформированными,Я не думаю, что это проблема закрытия, так как в этом случае будет возвращаться последняя строка изображения.Я довольно озадачен на этом этапе, поэтому любые предложения будут с благодарностью.

Ответы [ 2 ]

1 голос
/ 03 августа 2010

Возможно ли, что ваш JSON имеет индексированный нулем массив из пяти элементов, и поэтому image5 не определяется, когда ваш одноиндексированный цикл достигает этой последней итерации?

0 голосов
/ 03 августа 2010

Я понял это.Использование нотации массива вместо точечной нотации сделало свое дело.Я думаю, что сценарий пытался обработать имя свойства как число, а не как строку, поэтому в обозначениях массивов все было правильно.Оттуда было просто раздавить пару маленьких ошибок.

Решение:

<!doctype html>
<html lang="en-us">
    <head>
        <title>jQuery Cycle test</title>
        <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
        <script type="text/javascript" src="js/jquery.cycle.all.min.js"></script>
        <style>
            #slideshow a { margin: 0; padding: 0; color: #fff; }
        </style>
    </head>

    <body>
        <div id="slideshow">
        </div>
    </body>

    <script type="text/javascript">
        $.get('slideshow.php', {start : "true"}, function(data){
            var images = JSON.parse(data);
            for(var i = 0; i < 5; ++i){
                $('#slideshow').append('<a href="images/' + images['image' + i] + '"><img src="images/' + images['image' + i] + '" alt="" /></a>');
            }

                $('#slideshow').cycle({
                    fx: 'cover',
                    direction: 'right',
                    timeout: 3000,
                    speed: 300
                });
        });
    </script>

</html>
...