我是网络开发的新手,我正在努力构建我的第一个网站。
我遇到了一些麻烦,因为web开发依赖于几种编程语言,如PHP和JS,而对我来说最困难的部分是在这些语言之间进行通信。
例如,我正在尝试创建一个函数来压缩一个文件夹,并生成一个指向新档案的下载链接,这可以通过PHP轻松完成。然而,当用户单击zip按钮时,我还希望显示一个弹出窗口,告诉用户在文件夹被压缩时等待,并且当压缩完成时,我希望更改该弹出窗口上的文本并显示下载链接,当然,这需要JS。
我尝试过很多解决方案,但没有一个对我来说是完美的,我觉得这些解决方案又快又脏,这是我不想要的。
如果有什么秘密我不知道,请告诉我,这样我就可以最终像使用单一语言一样使用这些语言。
此外,如果你能帮我解决目前的问题,我将不胜感激。我只想知道如何构建一个表单,它可以调用显示弹出窗口的JS函数,然后调用PHP Zip_Folder函数,一旦PHP函数完成,我想在弹出窗口上显示下载链接。
这是我的表单代码:(它只调用显示弹出窗口的javascript函数)
<input type = 'button' onclick = 'Show_PopUP("Folder_to_zip")' value = 'Download Folder'>
这就是Show_PopUP功能代码:
function Show_PopUP(folder) {
var e = document.getElementById('Folder_Download_PopUp');
if(e.style.display == 'block')
e.style.display = 'none';
else {
e.style.display = 'block';}}
我已经有了压缩和生成档案下载链接的PHP函数,所以我现在需要的是在弹出窗口显示后调用它的方法,以及在函数完成后在弹出窗口上打印下载链接的方法。
这可能不是最好的方法,因为我是一个初学者,所以如果你有关于如何在没有这种复杂性的情况下完成任务的建议,我会很高兴。
如果我的问题太长,很抱歉,提前感谢您的帮助。
您需要做的是使用这些被称为XHRs或XMLHttpRequest(Google it)的东西,从JavaScript到php,这基本上有点像一个隐形浏览器,它会在后台访问php页面;加载";无论php页面返回什么,只有这一切都发生在JavaScript本身中,所以您可以阅读到;不可见页面";loaded,它是从php中加载的,并用它做一些事情,而不需要实际刷新页面。这个过程被称为AJAX(查找)
你能做的是,当你设置这个";"不可见页";,您还可以发送php页面可以读取的某些类型的信息,完成后,php页面可以将某些信息回显到不可见的页面,然后可以使用JavaScript读取这些信息。通过在JavaScript中发送某些值以及这个不可见的页面,并等待php向其返回一些内容,然后用JavaScript 读取这些内容,您可以在php和JavaScript之间轻松地进行通信
那么我们到底该怎么做呢?
首先在JavaScript方面,我们需要使;"不可见页";,从技术上讲,它实际上不是一个页面,它只是做了与显示任何其他网页一样正常的事情,从技术上来说,它被称为"页面";请求";因为这就像是向服务器索取一些数据,所以它基本上是";请求";然后,当服务器回显某个东西时,就称之为"他";响应";按照的要求
因此,要在JavaScript中发出这个新请求,我们可以执行以下
var asking= new XMLHttpRequest ()
现在,它就像一个看不见的页面被创建了,但还没有导航到任何东西,但我们现在必须隐喻性地";在URL中输入";到这个看不见的页面(实际上还没有"导航"到它),我们做
asking.open("GET", "pathToPHPpage.php?hi=there")
因此,第一部分被称为";获取";因为我们只想得到一个响应,而不需要实际发送任何东西(如果我们发送一个文件,我们会使用"POST",然后在下一步中输入文件日期),然后我们输入您想要获得的php页面的URL。如果它与JavaScript页面相同,只需放location.href,但在URL的末尾至少添加一些内容是很重要的,请注意";?hi=存在";,你可以称它为任何东西,但重要的是在.php页面后面紧跟一个问号,然后是某个东西的名称(在本例中为"hi"),然后是它的值(在本案中为"there"),因为php页面能够读取它,并根据它所说的给出不同的响应
好的,所以现在我们必须实际地";发送";该请求发送到服务器;导航";到不可见页面上的URL,进行
asking.send()
(如果你把"POST"放在前面,你可以在括号之间添加你想发送的日期,通常是以字符串的形式,但根据数据的不同,它可能会有所不同,请查找它以获得更多参考)
现在,在我们继续讨论JS之前,让我们快速切换到PHP(不必按照这个顺序),看看发生了什么我们需要倾听任何";请求";在php页面上;嗨"(因为这是我们之前在URL末尾的内容),为了做到这一点,在PHP的顶部(尽管从技术上讲,在PHP中的任何地方),我们进行
$isHi = $_GET["hi"];
if(isset ($isHi)) {
//Do some php code
echo "hi back!".$isHi;
}
基本上,我们只是在寻找"嗨";在我们的";获取";发送到PHP的请求,我们检查它是否是";设置";,意思是不为null,然后我们将一些消息回显给JS,现在让我们在JavaScript端上侦听该消息
回到JS,在.send行之后(或之前),我们需要监听页面何时回显。
为了做到这一点,我们检查它是否成功加载,因为有时可能会有错误,所以让我们做
asking.onreadstatechange= function () {
if(asking.readyState == 4 && asking.status==200) {
alert(asking.responseText)
} else alert("ooh something happened")
}
现在我们可以访问php代码给我们的响应
你可以将此扩展到其他形式的沟通,如果你有任何问题,请告诉我