Объединение php $ _GET [''] с функцией Javascript - PullRequest
2 голосов
/ 17 сентября 2011

В настоящее время я кодирую галерею, которая до сих пор комбинировала AJAX и Javascript с xml-файлом для загрузки всех изображений. Теперь я пришел к забавной части, где я нажимаю на изображение, чтобы войти во внутреннюю галерею. (На первой странице они загружают одно изображение каждого сеанса, и когда одно изображение нажимается, оно продолжается до остальных изображений этого сеанса.)

Проблема, с которой я столкнулся при работе с AJAX (я уверен, что для этого тоже есть хороший хак!) Заключается в том, что когда страница перезагружается, она автоматически возвращается к индексу сеанса, поскольку изменение URL не происходит.

Что я сделал сейчас, так это поместил одну функцию javascript в один документ, в который загружается только индекс галереи. Это работает безупречно.

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

Вот скрипт, который должен загружать определенные сессионные образы.

<script type="text/javascript">
    window.onload = displayGallery(<?php echo $_GET['session']; ?>);
</script>

<div id="gallery">

</div>

Когда я использовал только javascript и «onload» в ссылке, это работало просто отлично, но тогда у меня возникла проблема с перезагрузкой страницы. Теперь я просто php, чтобы включить этот файл и $ _GET переменная для "displayGallery ()"

function displayGallery(sessionAtt)

Так что, пытаясь прояснить это, я все объясняю, мне нужна помощь с тем, чтобы displayGallery (sessionAtt) действительно запускалась после получения существенной переменной из URL.

Я ОЧЕНЬ свеж на Javascript. Выполнено большинство скриптов в php до сих пор.

EDIT:

Чтобы немного объяснить сайт: я создаю галерею для своего друга. Для кого-либо еще нет логина, кроме нее, и все подстраницы (Пуск, Галерея, О и т. Д.) Загружаются через php "include".

XML:

<gallery>
    <session>
        <sessionName>Beauty</sessionName>
        <path>gallery/beauty/</path>
        <item>
            <file>_DSC2331.jpg</file>
            <name>Picture 1</name>
        </item>
        <item>
            <file>_DSC2339.jpg</file>
            <name>Picture 2</name>
        </item>
        <item>
            <file>_DSC2350.jpg</file>
            <name>Picture 3</name>
        </item>
        <date>2011-08-03</date>
    </session>
    <session>
        <sessionName>Red</sessionName>
        <path>gallery/red/</path>
        <item>
            <file>_MG_6227-web.jpg</file>
            <name>Picture 1</name>
        </item>
        <item>
            <file>_MG_6235-web.jpg</file>
            <name>Picture 2</name>
        </item>
        <item>
            <file>_MG_6240-cropped-web.jpg</file>
            <name>Picture 3</name>
        </item>
        <date>2011-08-03</date>
    </session>
</gallery>

JS:

function displayGallery(sessionAtt)
{
    var xmlDoc = loadDoc("gallery/gallery.xml");
    var sessions = xmlDoc.getElementsByTagName("session");
    var txt = getGallery(sessions, sessionAtt);
    document.getElementById("gallery").innerHTML = txt;
}

function getGallery(sessions, sessionAtt) {
    var items = null,
    i = 0,
    j = 0,
    sessionName = "",
    link = "",
    img = "",
    path = "",
    file = "",
    txt = "";
    for (i = 0; i < sessions.length; i++) { 
        sessionName = sessions[i].getElementsByTagName("sessionName")[0].childNodes[0].nodeValue;
        if(sessionName == sessionAtt)
        {
            items = sessions[i].getElementsByTagName("item");
            path = sessions[i].getElementsByTagName("path")[0].childNodes[0].nodeValue;
            for (j = 0; j < items.length; j++) {
                file = items[j].getElementsByTagName("file")[0].childNodes[0].nodeValue;
                link = '<a href="' + path + file + '" rel="lightbox[' + sessionName + ']" title="' + sessionName + '">';
                img = '<img src="' + path + file + '" class="thumb" onclick="displayImage();" /></a>';
                txt += link + img;
            }
        }
    }
    return txt;
}

Я попытался запустить сценарий с параметром sessionAtt, установленным в функции, и он работает.

window.onload = displayGallery;

Но при изменении на

window.onload = displayGallery('Red');

как вручную, так и с php ... Ничего.

Ответы [ 5 ]

1 голос
/ 17 сентября 2011

Ваш код работает нормально для меня. Единственное, что я сделал по-другому - я использовал <body onload="displayGallery('Red')"> вместо window.onload = displayGallery('Red');

Как указал Мартин, с помощью window.onload пытается найти <div id='gallery'> до загрузки страницы, что выдает ошибку: document.getElementById ("gallery") равно null

Использование <body onload="displayGallery('Red')"> ожидает завершения загрузки страницы перед вызовом displayGallery.

0 голосов
/ 17 сентября 2011

вместо window.onload = displayGallery(<?php echo $_GET['session']; ?>);

Используйте

window.onload = function() {
    displayGallery(<?php echo "'" . $_GET['session'] . "'"; ?>);
};

Как вы сказали, назначение функции типа window.onload = displayGallery; работает. При назначении его как window.onload = displayGallery('Red'); происходит то, что функция не присоединяется к window.onload, а то, что она возвращает . И функция ничего не возвращает, так что window.onload = undefined;.

Это также объясняет, почему ничего не происходит, потому что функция вызывается не при загрузке, а как только браузер выполняет скрипт.

Я исправил это, назначив функцию без ее выполнения (window.onload = function() { ... }), и поместив в нее функцию, которую вы выполняете.

0 голосов
/ 17 сентября 2011

Мне кажется, вы должны использовать XSLT вместо того, что вы делаете ... пометить его как WIKI, поскольку он не отвечает на ваш конкретный вопрос

0 голосов
/ 17 сентября 2011

Прочитав ваше описание несколько раз ...

1) Переменные GET работают, только если вы указали переменные в URL, например. index.php? сессия = model1

2) Вы говорите, что кнопка «Назад» не работает, потому что страница не меняется, что неправильно, если вы используете правильные переменные get

Ваша страница индекса должна быть связана с каждой страницей сеанса следующим образом: <a href="gallery.php?session=modela"> только тогда вы можете использовать javascript для извлечения переменной из файла gallery.php

0 голосов
/ 17 сентября 2011

Я не уверен, что понял, что вы пытаетесь сделать.Но попробуйте эти вещи.

**.создайте переменную javascript, которая будет содержать значение GET ['session'].и позже используйте эту переменную.его также легче отладить.

**.insdead из window.onload делает функцию, вызывающую ее 'init', и в теге body пишут:

<head>
 <script>
   function init(){
     //displaying gallery or other stuff
  }
 </script>
</head>
<body onload="init();">

, это гарантирует, что ваш скрипт запускается после загрузки страницы.

** ЕслиЯ правильно понял, для каждого пользователя есть сессия.и в этом случае (как правило) в самом верху вашего php-файла, даже до

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