为什么服务器端和客户端脚本无法交互

Why can't server side and client side scripts interact?

本文关键字:交互 脚本 客户端 服务器端 为什么      更新时间:2023-09-26

我是客户端和服务器端脚本的新手,我想知道,为什么它们不能交互?

Code Conquest 在这里陈述的主要区别在于:

。之所以称为客户端语言,是因为它在加载网页后在计算机上运行脚本。

服务器端或后端语言在加载 HTML 之前运行其脚本,而不是加载之后。

即使服务器端脚本(例如.PHP)已经执行,为什么在页面加载后不能更改(使用 JavaScript)?

我想从JS调用PHP。例如,有没有可能的方法可以做到这一点?

setInterval(<?php someFunction() ?>,10000);

对不起,如果我误解了什么,请指出给我。

好吧,他们可以互动,但不像你想象的那样。

将客户端 JavaScript 视为浏览器,

将服务器端代码视为服务器端代码。

然后它们将通过彼此之间发送消息进行通信,最常用的消息交换方法是 JSON。

总而言之,客户端代码可以通过GETPOST请求或使用 AJAX 与服务器通信。

服务器可以响应这些消息,并且还可以(这是在 HTML 5 标准中添加的)使用 WebSocket 向客户端发送事件。

它们无法交互(有点 - 在下面更详细地解释),因为它们在两个不同的地方运行。服务器端脚本 - 例如,PHP,将在服务器上运行,并在数据发送到用户的PC之前完成运行。

客户端脚本(例如,Javascript)在用户完成加载页面数据时开始运行。

因此,简而言之,PHP 甚至在 JS 开始执行之前就完成了执行 - 因此它们无法真正交互。

如何让它们交互是通过一些技巧和 JS 内部的调用来请求服务器的其他数据 - 所以在这一点上它们仍将单独运行,但您可以通过页面中进行的其他调用让它们交谈。

使用这种方法,即使它们完全独立于彼此地执行,它们也能够通过数据(例如JSON对象)交换信息,并给人一种它们正在一起工作的印象,尽管它们在完全不同的地方进行。

非技术类比

为了使用一个完全非IT的类比,希望能更清楚地说明这一点,假设服务器端脚本是一个军事基地。客户端脚本是部署到另一个国家/地区的单元。他们都在那里完成一项特定的任务,但他们完全独立地彼此工作。现在,JSON就像他们之间的电话。部署的单位可以打电话给基地,询问进一步的指示,然后执行它们,但就基地而言,他们不知道发生了什么,直到部署的单位再次打电话回家——所以他们可以一起工作,但单独这样做,不知道对方到底在做什么。

最简单的方法是使用 AJAX,这是一种动态生成/查找内容的轻量级方法。

var ajax_call = function() {
    $.ajax({ url: 'script.php?argument=value' }); // gets the php code you need.
};
var interval = 1000 * 60 * X; // X = amount of minutes it will take till it executes.
setInterval(ajax_call, interval); // sets the ajax_call function in motion

让我知道这是否有效。

简单的例子:

var request = new XMLHttpRequest();
request.open('GET', 'http://example.com/yourfile.php?func=someFunc', false);
request.send();
setInterval(request.responseText, 10000);

或分配给变量:

yourvar = request.responseText;
setInterval(yourvar, 10000);

然后在您的文件中.php:

$func = $_GET['func'];
//use $func to call func or do other stuff

客户端在计算机浏览器上运行。服务器端在服务器上运行,并生成发送到客户端的代码。

Ajax或jQuery可以直接从服务器获取和发送数据。