1. 程式人生 > >web前端與後臺資料互動

web前端與後臺資料互動

1.前端請求資料URL由誰來寫?
在開發中,URL主要是由後臺來寫的,寫好了給前端開發者.如果後臺在查詢資料,需要藉助查詢條件才能查詢到前端需要的資料時,這時後臺會要求前端提供相關的查詢引數,這裡的查詢引數也就是URL請求的引數。

2.介面文件主要由誰來寫?
介面文件也是主要由後臺開發者來寫的,因為直接跟資料打交道的就是後臺,後臺是最清楚,資料庫裡面有什麼資料,能返回什麼資料.前端開發只是資料的被動接受者.所以介面文件也主要是由後臺來完成的,前端只是介面文件的使用者,使用過程中,發現返回的資料不對,則需要跟後臺進行商量,由後臺來修改.切記 前端不要隨意更改介面文件,除非在取得後臺開發人員的同意的情況下.總的來講,介面文件主要由後臺來設計,修改,前端開發者起到了輔助的作用。

3.前端開發與後臺互動的資料格式主要是什麼?
主要是JSON
XML現在用的不多

4.前端開發的後臺互動原理?
在專案的時候,我們前後端會大概說一下介面地址,前端請求的引數,後端返回的引數,然後大家就開始寫,寫的差不多的時候,大家調一下介面看一下返回的資料,沒問題就可以了。

5.前端請求引數的形式
GET和POST兩種方式
對安全性不高 採用get方便
post要比get安全
GET - 從指定的伺服器中獲取資料
POST - 提交資料給指定的伺服器處理

6.前端應該告知後臺哪些有效資訊,後臺才能返回前端想的資料的呢?
先將要展示的頁面內容進行模組劃分,將模組的內容提取出來,以及方便前端的一些標誌值等,將所有想要的內容和邏輯告知後端,
後端就會去資料庫裡面去查詢相應的資料表中去獲得相應的內容,或者圖片地址資訊。
URL中的引數主要是根據後臺需要,
如果後臺需要一個引數作為查詢的輔助條件 前端在URL資料請求時就傳遞引數。
引數前面?
幾個引數中間&

7.我們應該怎麼把頁面這些資訊有效傳達給後臺,以及後臺是如何獲取到這些資料?
總的來講:所有前端請求的URL後面的引數,都是輔助後臺資料查詢的.如果不需要引數,那麼後臺就會直接給個URL給前端。

8.前端應該如何回拒一些本不屬於自己做的一些功能需求或任務?
在與後臺打交道中,我們經常遇到這種情況,有時候明明後臺來處理某個事件很簡單,後臺非要你來做,這時候我們應該懂得去回絕他。
原則:前端就是負責把資料展示在頁面上
發揮:這就需要我們對一個需求,一個任務的要有清晰認識了,如果對任務含糊不清,自己都沒搞明白,你只能受後臺擺佈了.最後也會因為任務沒有完成而備受責難了。

9.當前端在呼叫資料介面時,發現有些資料不是我們想要的,那麼前端應該怎麼辦呢或者怎麼跟後臺講呢?
首先要把請求的URL和返回的資料以及在頁面的展示的情況給跟後臺看,這樣有理有據,後臺開發人員是不會說什麼的,否則,後臺會很不耐煩的,甚至罵你的可能都有,本身做後臺比較難,尤其在查詢資料,取資料,封裝資料方面都比較難處理。

10.為什麼需要在請求的時候傳入引數?
因為後臺在查詢資料庫的時候需要條件查詢。

DEMO:

var data=JSON.stringify({"page": {"pagenow": 1,"pagesize": 20},"file":{"name":"jpg"},"catalogs":[{"id":1},{"id":2}]});
        $.ajax({
            type:"POST",
            url:"//訪問的url",
            data:data,
            contentType:"application/json", 
            success:function(data){
                //顯示資料
            }
        });

注意:

一、contentType

contentType,可以是application/x-www-form-urlencoded這種預設型別的,不過當後臺有struts等框架的話,會在action之前攔截請求,並把request body 裡面的值都讀出來,導致我們不能再request裡面讀取到值,只能依賴struts的domain model 
所有如果有後臺用這種機制的話,那就需要更改contentType:application/json,這樣子strust就不會攔截請求了。

二、stringify和parseJSON

這兩種方法不能亂用,一不小心的話就會導致後臺解析不了資料,正確的用法在上面。 
stringify是將Json轉義,parseJSON是將json去除轉義並解析成物件 
總結

前端傳後臺json,應該傳字串過去,不能傳Object物件,而且要適當指定contentType。