現(xiàn)如今,JS作為前端開發(fā)的主要語言,在頁面交互的處理中發(fā)揮著極其關(guān)鍵的作用。不過在一些特殊的場(chǎng)景下,特別需要從后端獲取數(shù)據(jù),JS就需要借助PHP調(diào)用后端提供的API來獲取數(shù)據(jù)。隨著前后端分離的趨勢(shì)日益明顯,JS調(diào)用PHP的方式顯得越來越重要。
在介紹JS調(diào)用PHP的方式之前,我們需要為讀者介紹一下后端與前端之間的數(shù)據(jù)交互方式。基本上有兩種方式,一種是AJAX,另一種是后端提供RESTful API。前一種方式比較適用于需要?jiǎng)討B(tài)刷新頁面內(nèi)容的場(chǎng)合,后者則適用于前端與后端完全分離、通過數(shù)據(jù)交互實(shí)現(xiàn)業(yè)務(wù)邏輯的場(chǎng)合。JS與PHP調(diào)用后端的方式在這兩種場(chǎng)合下略有不同。
最簡(jiǎn)單的方式當(dāng)然是AJAX調(diào)用了。比如在前端的JS代碼中需要從后端獲取一條記錄并展現(xiàn)在頁面上,代碼可以這樣寫:
$.ajax({ type: 'POST', url: 'api.php', data: { action: 'get_record', id: 123 }, success: function(data){ // 處理data的代碼 }, error: function(err){ // 處理err的代碼 } });
上述代碼使用jQuery的AJAX方式調(diào)用了API.php,傳遞了action和id參數(shù)。這相當(dāng)于在后端建立了一條路由,當(dāng)前端調(diào)用它的時(shí)候,后端根據(jù)路由的定義執(zhí)行相應(yīng)的代碼,并以JSON格式返回給前端。成功的情況下會(huì)調(diào)用success函數(shù),而失敗時(shí)則調(diào)用error函數(shù)。這里需要注意的是,后端返回的數(shù)據(jù)可以是任何格式,但一般建議使用JSON格式。
對(duì)于RESTful API的調(diào)用,則有一些不同。在大多數(shù)情況下,前端需要封裝一個(gè)RESTful API調(diào)用類或方法。比如以下這個(gè)例子:
class RESTfulApiCaller{ constructor(apiUrl){ this.apiUrl = apiUrl; } call(method, data, callback){ var xhr = new XMLHttpRequest(); xhr.open(method, this.apiUrl); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.onload = function(){ callback(xhr.responseText); }; xhr.send(JSON.stringify(data)); } } var api = new RESTfulApiCaller('http://localhost/api.php'); api.call('POST', {action: 'get_record', id: 123}, function(data){ // 處理data的代碼 });
從上述代碼可以看出,調(diào)用RESTful API的方式與AJAX相比,多了一些額外的處理。首先需要封裝一個(gè)API調(diào)用類,以便后續(xù)重復(fù)使用。然后需要在請(qǐng)求頭中指定Content-Type,這里可以是任何格式,但一般建議使用JSON格式。最后需要在請(qǐng)求體中傳遞數(shù)據(jù),并在請(qǐng)求完成后根據(jù)返回結(jié)果調(diào)用相應(yīng)的回調(diào)函數(shù)。
總的來說,JS調(diào)用PHP主要是通過AJAX或RESTful API的方式實(shí)現(xiàn)的。這其中,AJAX比較適用于動(dòng)態(tài)頁面內(nèi)容刷新的場(chǎng)合,RESTful API則適用于前后端完全分離的業(yè)務(wù)邏輯實(shí)現(xiàn)場(chǎng)合。同時(shí)需要注意的是,后端返回的數(shù)據(jù)一般建議使用JSON格式,并且需要在前端中進(jìn)行相應(yīng)的解析,這樣才能更好的理解后端返回的數(shù)據(jù)。