【问题标题】:Combining php $_GET[''] with Javascript function结合 php $_GET[''] 与 Javascript 函数
【发布时间】:2011-09-17 08:23:20
【问题描述】:

我目前正在编写一个画廊,到目前为止,它一直在将 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 完成的。

编辑:

稍微解释一下这个网站:这是一个我正在为我的朋友制作的画廊。除了她和所有子页面(开始、画廊、关于等)之外,其他任何人都无法登录,都是通过 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... 什么都没有。

【问题讨论】:

  • 结合“AJAX 和 Javascript”是什么意思? AJAX Javascript(异步Javascript和XML)
  • 我真正想通过什么方法得到什么。 AJAX 为其他所有内容获取 xml 文件和 Javascript。我知道它们是一样的,这只是我的一个糟糕的解释。 :)
  • 我想我了解您想要实现的目标,但是对于您尝试实现它的如何,我有点困惑。当你说“AJAX”时,你到底是什么意思?您在此处显示的代码并不是真正的 AJAX,当您使用 AJAX 时不应重新加载页面。
  • 我玩了一下我从上一个问题中得到的脚本,即:stackoverflow.com/questions/7367460/javascript-xml-reader/…
  • 如果你回显 $_GET['session'] 你会得到什么吗?

标签: php javascript xmlhttprequest


【解决方案1】:

您的代码对我来说运行良好。唯一不同的是我使用了&lt;body onload="displayGallery('Red')"&gt; 而不是window.onload = displayGallery('Red');

正如 Martin 指出的那样,使用 window.onload 尝试在页面加载之前找到 &lt;div id='gallery'&gt; 给出错误:document.getElementById("gallery") is null强>

使用&lt;body onload="displayGallery('Red')"&gt; 在调用displayGallery 之前等待页面完成加载。

【讨论】:

  • 这实际上给了我解决方案!我不能使用 因为我在 php 中加载页面,这意味着如果我把它放在 body 中,一切都会发生冲突。但相反,我将
  • @Richard:好主意。我不知道为什么我没有想到。 :-p
  • 不知道你家几点了,但现在是晚上 02:15。那时可以不去想所有的事情。 :)
  • @Richard:现在才 8:30,所以我真的没有借口。 :) 你在 Javascript 方面做得很好。我给你点赞。如果可以的话,我想建议您研究一下 jQuery。它使 AJAX 变得更加容易,您可以使用大量插件来处理灯箱、淡入淡出、轮播等等。
  • 我在 jQuery 上看了一些,实际上我在我的网站上使用了灯箱。到目前为止,它就像一个魅力。并感谢您的赞扬和帮助。据说每天都能学到新东西。 :)
【解决方案2】:

我不确定我是否理解您要执行的操作。但是试试这些东西。

**。创建一个保存 GET['session'] 值的 javascript 变量。然后使用该变量。它也更容易调试。

**。 insdead 的 window.onload 使一个函数调用它'init'并在body标签中写:

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

这可确保您的脚本在页面加载后运行。

** 如果我没听错的话,每个用户都有一个会话。在这种情况下(根据经验),位于 php 文件的最顶部,甚至在

session_start();

【讨论】:

  • 没有用户,我不能在 body-tag 中包含它,因为我使用 php "include("");" 加载所有子页面。
  • 我认为OP所说的“会话”是一个画廊会话(例如:不同的模型)。至少这是我从中得到的。
  • 问题仍然在于页面加载时我需要传递的函数中的变量。我希望人们能够在不从根目录走到他们所在的会话的情况下按下重新加载。 (点击两三下,但对某些人来说已经够烦了。)这就是为什么我必须从 url 中获取会话名称并将其添加到 javascript 函数中的原因。 jQuery可以工作吗?如果有,怎么做?
【解决方案3】:

多次阅读您的描述后...

1) GET 变量仅在您在 URL 中提供变量时才有效,例如。 index.php?session=model1

2)你说后退按钮不起作用,因为页面没有改变,如果你正确使用get variables,这是错误的

您的索引页面应该像这样链接到每个会话页面:&lt;a href="gallery.php?session=modela"&gt; 只有这样您才能使用 javascript 来拉取 gallery.php 上的变量

【讨论】:

  • 我再次解释得很糟糕,对此我深表歉意。我正在使用 ?session=something 来获取 URL 的“某物”(例如)。问题不是后退按钮(因为我什至还没有创建一个。)问题是画廊中的所有内容都加载了 javascript,因此 url 保持不变。我需要运行“displayGallery();”,但它不想工作。我在网址中有“会话”。
  • 获取变量仅适用于更改 URL,您必须重新加载页面才能通过 GET 更改页面。如果您想在页面中更改内容,则无需使用 Javascript 变量。
【解决方案4】:

在我看来,您应该使用 XSLT 而不是您所做的...将其标记为 WIKI,因为它不能回答您的具体问题

【讨论】:

    【解决方案5】:

    而不是window.onload = displayGallery(&lt;?php echo $_GET['session']; ?&gt;);

    使用

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

    正如你所说,分配像window.onload = displayGallery; 这样的函数是可行的。当像window.onload = displayGallery('Red'); 一样分配它时,发生的事情是该函数没有附加到window.onload,但它返回 是什么。而且函数什么都不返回,所以window.onload = undefined;

    这也解释了为什么什么也没发生,因为函数不是在 onload 时调用的,而是在浏览器执行脚本时立即调用的。

    我解决此问题的方法是分配一个函数而不执行它 (window.onload = function() { ... }),然后将您正在执行的函数放入其中。

    【讨论】:

    • 似乎有效,但为了知识起见;为什么? :)
    • 正如您所说,分配像window.onload = displayGallery; 这样的功能是可行的。当像window.onload = displayGallery('Red'); 一样分配它时,发生的是函数没有附加到window.onload,它返回 是什么。该函数什么也不返回,所以window.onload = undefined;。这也解释了为什么什么也没发生,因为函数不是在 onload 上调用的,而是在浏览器执行脚本时立即调用的。
    • 我还应该指出,我将您与 PHP 的呼应用引号括起来 - 记住这一点很重要。
    • 否则我通过将脚本移动到 div 下解决了问题,因此 div 是在脚本之前创建的,因为脚本正在寻找该 div 以插入代码。无论如何,谢谢,我会记住你的建议,以防我遇到更多麻烦。 :)
    • 不用担心 :) 我也把解释放在了答案中
    猜你喜欢
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    相关资源
    最近更新 更多