3

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

Code Conquest 的主要区别在于

...被称为客户端语言是因为它在您加载网页后在您的计算机上运行脚本。

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

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

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

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

抱歉,如果我误解了某些内容,请指出给我。

4

5 回答 5

3

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

将客户端 JavaScript 视为浏览器,并将服务器端代码视为服务器。

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

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

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

于 2013-10-31T22:30:55.950 回答
2

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

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

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

你如何让它们交互是通过一些技巧和 JS 内部的调用来从服务器请求额外的数据 - 所以此时它们仍然会单独运行,但你可以通过在页面中进行的额外调用让它们交谈。

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

非技术类比

使用一个完全非 IT 的类比,希望它更清楚,假设服务器端脚本是一个军队基地。客户端脚本是部署到另一个国家的单位。他们都在那里完成一项特定的任务,但他们完全独立于彼此工作。现在,JSON 就像他们之间的电话。部署的单位可以呼叫基地,请求进一步的指示,然后执行它们,但就基地而言,他们不知道发生了什么,直到部署的单位再次回家 - 所以他们可以排序一起工作,但单独做,不知道对方到底在做什么。

于 2013-10-31T22:33:04.460 回答
1

最简单的方法是使用 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

让我知道这个是否奏效。

于 2013-10-31T22:37:20.290 回答
1

简单的例子:

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

setInterval(request.responseText, 10000);

或分配给 var:

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

然后在 yourfile.php 中:

$func = $_GET['func'];
//use $func to call func or do other stuff
于 2013-10-31T22:41:33.307 回答
0

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

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

于 2013-10-31T22:34:07.980 回答