为了账号安全,请及时绑定邮箱和手机立即绑定

php和JS之间如何通信?

php和JS之间如何通信?

PHP
慕的地10843 2023-10-01 17:20:25
我是网络开发新手,我正在尝试建立我的第一个网站。我遇到了一些麻烦,因为 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函数,所以我现在需要的是在显示弹出窗口后调用它的方法,以及在弹出窗口上打印一次下载链接的方法功能完成。这可能不是最好的方法,因为我是初学者,所以如果您对如何在没有这种复杂性的情况下完成我的任务有建议,我会非常高兴。抱歉,如果我的问题太长,请提前感谢您的帮助。
查看完整描述

1 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

您需要做的是使用这些称为 XHR 或 XMLHttpRequest(Google it)的东西,从 JavaScript 到 php,这基本上有点像一个隐形浏览器,在幕后进入 php 页面并“加载”任何 php 页面返回,只有这一切都发生在 JavaScript 本身内,因此您可以读取这个来自 php 的“不可见页面”加载,并对其进行操作,而无需实际刷新页面。这个过程称为 AJAX(查找)


你可以做的是,当你设置这个“不可见页面”时,你还可以发送 php 页面可以读取的某些类型的信息,完成后,php 页面可以将某些内容回显给不可见页面,然后可以用 JavaScript 读取。您可以轻松地在 php 和 JavaScript 之间进行通信,方法是在 JavaScript 中发送某些值以及这个不可见的页面,然后等待 php 回显某些内容,然后使用 JavaScript 读取该值


那么我们实际上如何做到这一点呢?


首先在 JavaScript 方面,我们需要制作这个“不可见页面”,从技术上讲,它实际上不是一个页面,它只是执行与显示任何其他网页相同的正常操作,这在技术上称为“请求”,因为这就像向服务器询问一些数据,它基本上是“请求”它,然后当服务器回显某些数据时,这就是所谓的“响应”所请求的内容


因此,要在 JavaScript 中发出这个新请求,我们可以执行以下操作


var asking= new XMLHttpRequest ()


现在就好像创建了一个不可见页面,但尚未导航到任何内容,但我们现在必须隐喻地“输入 URL”到这个不可见页面(尚未实际“导航”到它)才能做到这一点


asking.open("GET", "pathToPHPpage.php?hi=there")


因此,第一部分称为“GET”,因为我们只想简单地获取响应,而不实际发送任何内容(如果我们发送文件,我们将使用“POST”,然后将文件日期放入下一步),然后我们输入您想要获取的 php 页面的 URL。如果它与 JavaScript 页面相同,只需放置 location.href 即可,但至少在 URL 末尾添加一些内容很重要,请注意“?hi=there”,您可以将其称为任何名称,但重要的是紧跟在 .php 页面后面的问号,然后是某个东西的名称(在本例中为“hi”),后面跟着它的值(在本例中为“there”),因为 php 页面能够读取该内容,并给出不同的值根据它所说的内容做出回应


好的,现在我们必须实际将该请求“发送”到服务器,这就像隐喻地“导航”到不可见页面上的 URL 一样


asking.send()


(如果你把“POST”放在前面,你可以在括号之间添加你想要发送的日期,通常是字符串的形式,但根据数据的不同它可能会有所不同,查找它以获取更多参考)


现在,在我们继续 JS 方面之前,让我们快速切换到 PHP(但不必按照这个顺序)来看看发生了什么。我们需要监听 php 页面上包含名称的任何“请求” “hi”(因为这是我们之前在 URL 末尾的内容),为了做到这一点,在 PHP 的顶部(技术上在 php 中的任何地方)我们做


$isHi = $_GET["hi"];

if(isset ($isHi)) {

//Do some php code

    echo "hi back!".$isHi;

}

基本上,我们只是在发送到 PHP 的“GET”请求中查找“*hi”名称,我们检查它是否为“set”,即不为空,然后我们将一些消息回显给 JS,现在让我们监听该消息在 JavaScript 方面


回到 JS,在 .send 行之后(或之前),我们需要监听页面何时回显。


为此,我们检查它是否成功加载,因为有时可能会出现错误,所以让我们这样做


asking.onreadstatechange= function () {

    if(asking.readyState == 4 && asking.status==200) {

        alert(asking.responseText)

    } else alert("ooh something happened")

}


现在我们可以访问 php 代码给我们的响应


您可以将其扩展到其他形式的沟通,如果您有任何疑问,请告诉我


查看完整回答
反对 回复 2023-10-01
  • 1 回答
  • 0 关注
  • 76 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信