簡體   English   中英

為什么服務器端和客戶端腳本不能交互?

[英]Why can't server side and client side scripts interact?

我是客戶端和服務器端腳本的新手,我想知道他們為什么不能互動?

主要的區別代碼征服說這里是:

...被稱為客戶端語言是因為它在您加載網頁后在您的計算機上運行腳本。

服務器端或后端語言在加載HTML之前運行其腳本,而不是之后。

即使已經執行了服務器端腳本(例如PHP),如何在頁面加載后無法更改(使用JavaScript)?

我想從JS調用PHP。 例如,有可能這樣做嗎?

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

對不起,如果我誤解了一些東西,請指出給我。

他們可以互動,但不像你想象的那樣。

將客戶端JavaScript視為瀏覽器,並考慮服務器端代碼以及服務器。

然后他們將通過彼此之間發送消息進行通信,最常用的交換消息的方法是JSON。

總結一下,客戶端代碼可以與服務器通信,通過GETPOST請求或使用AJAX發送消息。

服務器可以響應這些消息,它也可以(這是在HTML 5標准中添加的)使用WebSockets將事件發送到客戶端。

他們不能互動(有點 - 下面會詳細解釋)因為它們在兩個不同的地方運行。 服務器端腳本(例如PHP)將在服務器上運行並在數據發送到用戶PC之前完成運行。

客戶端腳本(例如,Javascript)在用戶完成加載頁面數據時START運行。

因此,簡而言之,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);

或者分配給var:

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

然后在yourfile.php中:

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

客戶端在計算機瀏覽器上運行。 服務器端在服務器上運行並生成發送到客戶端的代碼。

Ajax或jQuery可以直接從服務器獲取和發送數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM