php和JS怎么通信?
how to commuincate between php and JS?
我是网络开发的新手,我正在尝试建立我的第一个网站。
我遇到了一些麻烦,因为 Web 开发依赖于多种编程语言,如 PHP 和 JS,对我来说最困难的部分是在这些语言之间进行通信。
例如,我正在尝试创建一个函数来压缩文件夹并生成一个下载 link 到该新存档,这可以通过 PHP 轻松完成。但是,当用户单击 zip 按钮时,我还希望显示一个弹出窗口 window,告诉用户在压缩文件夹时等待,压缩完成后我想更改文本弹出并显示下载link,当然,这需要JS。
我尝试了很多解决方案,但 none 对我来说似乎是完美的,我觉得这些解决方案又快又脏,我不想要。
如果有什么我不知道的秘密,请告诉我,以便我最终可以像使用单一语言一样使用这些语言。
此外,如果您能帮助我解决目前的问题,我将不胜感激。
我只想知道如何构造一个窗体,可以调用显示弹窗的JS函数,然后调用PHPZip_Folder函数,一旦PHP函数完成,我想在弹出 window.
上显示下载 link
这是我的表单代码:(只调用了显示弹窗的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压缩包生成下载link的功能,所以我现在需要的是弹窗显示后的调用方式,以及一种在功能完成后在弹出窗口中打印下载 link 的方法。
这可能不是最好的方法,因为我是初学者,所以如果你有关于如何在没有这种复杂性的情况下完成我的任务的建议,我将非常高兴。
抱歉,如果我的问题太长,在此先感谢您的帮助。
你需要做的是使用这些叫做 XHR 或 XMLHttpRequest(Google)的东西,从 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”,然后将下一步中的文件日期),然后我们在 URL 中输入您想要获取的 php 页面。如果它与 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”,意思不是 null,然后我们回显了一些消息对于 JS,现在让我们在 JavaScript 端收听该消息
回到 JS,在 .send 行之后(或之前),我们需要监听页面何时回显。
为此,我们检查它是否成功加载,因为有时可能会出现错误,所以让我们这样做
asking.onreadstatechange= function () {
if(asking.readyState == 4 && asking.status==200) {
alert(asking.responseText)
} else alert("ooh something happened")
}
现在我们可以访问 php 代码给我们的响应
您可以将此扩展到其他形式的交流,如果您有任何问题,请告诉我
我是网络开发的新手,我正在尝试建立我的第一个网站。
我遇到了一些麻烦,因为 Web 开发依赖于多种编程语言,如 PHP 和 JS,对我来说最困难的部分是在这些语言之间进行通信。
例如,我正在尝试创建一个函数来压缩文件夹并生成一个下载 link 到该新存档,这可以通过 PHP 轻松完成。但是,当用户单击 zip 按钮时,我还希望显示一个弹出窗口 window,告诉用户在压缩文件夹时等待,压缩完成后我想更改文本弹出并显示下载link,当然,这需要JS。
我尝试了很多解决方案,但 none 对我来说似乎是完美的,我觉得这些解决方案又快又脏,我不想要。
如果有什么我不知道的秘密,请告诉我,以便我最终可以像使用单一语言一样使用这些语言。
此外,如果您能帮助我解决目前的问题,我将不胜感激。 我只想知道如何构造一个窗体,可以调用显示弹窗的JS函数,然后调用PHPZip_Folder函数,一旦PHP函数完成,我想在弹出 window.
上显示下载 link这是我的表单代码:(只调用了显示弹窗的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压缩包生成下载link的功能,所以我现在需要的是弹窗显示后的调用方式,以及一种在功能完成后在弹出窗口中打印下载 link 的方法。
这可能不是最好的方法,因为我是初学者,所以如果你有关于如何在没有这种复杂性的情况下完成我的任务的建议,我将非常高兴。
抱歉,如果我的问题太长,在此先感谢您的帮助。
你需要做的是使用这些叫做 XHR 或 XMLHttpRequest(Google)的东西,从 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”,然后将下一步中的文件日期),然后我们在 URL 中输入您想要获取的 php 页面。如果它与 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”,意思不是 null,然后我们回显了一些消息对于 JS,现在让我们在 JavaScript 端收听该消息
回到 JS,在 .send 行之后(或之前),我们需要监听页面何时回显。
为此,我们检查它是否成功加载,因为有时可能会出现错误,所以让我们这样做
asking.onreadstatechange= function () {
if(asking.readyState == 4 && asking.status==200) {
alert(asking.responseText)
} else alert("ooh something happened")
}
现在我们可以访问 php 代码给我们的响应
您可以将此扩展到其他形式的交流,如果您有任何问题,请告诉我