为什么服务器端和客户端脚本不能交互?

时间:2013-10-31 22:28:18

标签: javascript php client-side server-side

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

Code Conquest声明here的主要区别在于:

  

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

  

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

即使已经执行了服务器端脚本(例如PHP),如何在页面加载后无法更改(使用JavaScript)?

我想从JS调用PHP。例如,有可能这样做吗?

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

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

5 个答案:

答案 0 :(得分:3)

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

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

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

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

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

答案 1 :(得分:2)

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

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

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

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

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

非技术类比

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

答案 2 :(得分: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

让我知道这是否有效。

答案 3 :(得分: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

答案 4 :(得分:0)

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

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