欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

實(shí)現(xiàn)前后端數(shù)據(jù)交互方法匯總

 更新時(shí)間:2015年04月07日 10:26:11   投稿:hebedich  
這篇文章給大家介紹幾種常用的前后端數(shù)據(jù)交互方法,并給出使用建議。以提高前后端協(xié)同開發(fā)的效率。非常的詳細(xì),推薦給小伙伴們,有需要的小伙伴可以參考下。

此文章適合前后端協(xié)同開發(fā)經(jīng)驗(yàn)不足的新手閱讀。

HTML賦值

輸出到 Element 的 value 或 data-name

<input type="hidden" value="<?php echo $user_avatar;?>" />
<div data-value="<?php echo $user_avatar;?>"></div>

渲染結(jié)果

<input type="hidden" value="https://avatars1.githubusercontent.com/u/3949015?v=3&s=40" />
<div data-avatar="https://avatars1.githubusercontent.com/u/3949015?v=3&s=40"></div>

使用 JS 獲取

$('input').val();
// http://jquery.bootcss.com/jQuery.data/
$('div').data('avatar');

優(yōu)點(diǎn):

不占用全局變量,由 JS 自由獲取。

使用建議:

適合傳遞簡(jiǎn)單數(shù)據(jù),也非常適合多個(gè)簡(jiǎn)單數(shù)據(jù)與 Element 綁定關(guān)系。

<ul>
<li>nimojs <span data-userid="1" >刪除</span></li>
<li>nimo22 <span data-userid="2" >刪除</span></li>
<li>nimo33 <span data-userid="3" >刪除</span></li>
<li>nimo44 <span data-userid="4" >刪除</span></li>
<li>nimo55 <span data-userid="5" >刪除</span></li>
</ul>
<script>
$('span').on('click',function(){
  $.post('/ajax/remove/',$(this).data('userid'),function(data){
    // ...
  })
})
</script>

JS賦值

將數(shù)據(jù)填充到 <script> 的 JavaScript 變量聲明中。

<script>
var user_avatar = "<?php echo $user_avatar;?>";
// 渲染結(jié)果
// var user_avatar = "https://avatars1.githubusercontent.com/u/3949015?v=3&s=40";
</script>

或使用 Smarty 后端模板引擎:

<script>
var user_avatar = "{$user_avatar}";
</script>

優(yōu)點(diǎn):
傳遞數(shù)據(jù)非常方便。前端直接調(diào)用 user_avatar 變量使用數(shù)據(jù)。

缺點(diǎn):

為了傳遞一個(gè)字符串?dāng)?shù)據(jù)占用了全局變量 user_avatar,當(dāng)有很多數(shù)據(jù)需要傳輸時(shí)則會(huì)占用很多全局變量。
如果返回?cái)?shù)據(jù)存在換行將會(huì)導(dǎo)致JS報(bào)錯(cuò)

// 渲染結(jié)果有換行符
var user_id = "https://avatars1.githubusercontent.com/u/3949015?v=3&s=40";
// Uncaught SyntaxError: Unexpected token ILLEGAL

優(yōu)化:

可以通過(guò)指向的某一個(gè)變量存放所有后端返回的內(nèi)容,最小程度占用全局變量。例:

// PHP 代碼
var SERVER_DATA = {
  username: {$username},
  userid: {$userid},
  title: {$title}
}
// 渲染結(jié)果
var SERVER_DATA = {
  username: "NimoChu",
  userid: 1,
  title: 'F2E'
}

使用建議:

需要最快速度傳遞數(shù)據(jù)給 JS 并十分確定此數(shù)據(jù)穩(wěn)定時(shí),使用此方式。數(shù)據(jù)格式復(fù)雜的建議使用script填充JSON 或AJAX獲取JSON 方法。

script填充JSON
什么是JSON?

填充 JSON 數(shù)據(jù)到 <script> 標(biāo)簽中,前端通過(guò) DOM 獲取 JSON字符串并解析成對(duì)象。

<script type="text/template" id="data">{"username":"nimojs","userid":1}</script>
<script>
var data = JSON.parse($('#data').html());
//{username:"nimojs",userid:1}
</script>

優(yōu)點(diǎn):

頁(yè)面加載完成后就可以獲取到數(shù)據(jù)。不占用全局變量,可傳遞大量數(shù)據(jù)集合。

缺點(diǎn):

數(shù)據(jù)量特別大時(shí)會(huì)導(dǎo)致頁(yè)面初次加載變慢。變慢并不只是文件大小導(dǎo)致的,也因?yàn)榉?wù)器查詢數(shù)據(jù)并返回合集是需要時(shí)間,可使用AJAX獲取JSON完成按需加載和加載等待。

使用建議:

適合傳遞在DOM加載完成時(shí)就需要用到的大量數(shù)據(jù)集合。例如:前端控制頁(yè)面渲染,后端將JSON數(shù)據(jù)源填充到 <script> 由前端使用 JavaScript模板引擎進(jìn)行頁(yè)面渲染。

AJAX獲取JSON

使用 AJAX 獲取JSON數(shù)據(jù)

<span id="showdata">查看資料</span>
<div style="display:none;" id="box">
  <h2>用戶信息</h2>
  <p id="info"><img src="loading.gif" /></p>
</div>
$('#showdata').on('click',function(){
  $('#box').show();
  $.getJSON('/ajax/userdata/',function(oData){
    // oData = {"username":"nimojs","userid":1}
    $('#info').html('用戶名:' + oData.username + '<br>用戶ID:' + oData.userid);
  })
})

這是一個(gè)通過(guò)AJAX 獲取用戶資料的示例。流程如下:

頁(yè)面上只顯示查看資料
用戶點(diǎn)擊查看資料
顯示用戶信息和 loading 圖片
向服務(wù)器發(fā)送獲取用戶信息的AJAX請(qǐng)求
服務(wù)器返回JSON字符串,$.getJSON 自動(dòng)將返回的 JSON字符串轉(zhuǎn)換為對(duì)象
填充內(nèi)容到 <p id="info">

優(yōu)點(diǎn):

不占用全局變量和 DOM 節(jié)點(diǎn),可以自由控制獲取數(shù)據(jù)的觸發(fā)條件(頁(yè)面加載完成時(shí)、用戶點(diǎn)擊查看資料時(shí)或用戶點(diǎn)擊某個(gè)按鈕時(shí))。當(dāng)開始獲取數(shù)據(jù)時(shí)可使用 loading 圖片占位提示用戶數(shù)據(jù)正在讀取。防止頁(yè)面加載所有數(shù)據(jù)導(dǎo)致的頁(yè)面加載緩慢。

缺點(diǎn):

會(huì)產(chǎn)生額外的HTTP請(qǐng)求。不能在DOM加載完成以后立即獲取,需要發(fā)送請(qǐng)求-接收響應(yīng)。

使用建議:

適合加載非主要信息、設(shè)定觸發(fā)條件(用戶點(diǎn)擊查看資料時(shí)),并提供友好的數(shù)據(jù)讀取等待提示。

WebSocket實(shí)時(shí)傳輸數(shù)據(jù)
如果將 AJAX請(qǐng)求和響應(yīng)比喻成給服務(wù)器發(fā)短信和等待服務(wù)器回復(fù)短信,而 WebSocket 就如同和服務(wù)器打電話。

此處不對(duì)WebSocket做過(guò)多介紹,附上參考資料:

Wiki:WebSocket
使用 HTML5 WebSocket 構(gòu)建實(shí)時(shí) Web 應(yīng)用
Ajax vs WebSocket

總結(jié)
每種情況都有每種情況的用處,沒有絕對(duì)正確的方法。根據(jù)實(shí)際情況靈活的選擇獲取數(shù)據(jù)方式。

以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。

相關(guān)文章

  • JavaScript數(shù)據(jù)結(jié)構(gòu)和算法之二叉樹詳解

    JavaScript數(shù)據(jù)結(jié)構(gòu)和算法之二叉樹詳解

    這篇文章主要介紹了JavaScript數(shù)據(jù)結(jié)構(gòu)和算法之二叉樹詳解,本文講解了二叉樹的概念、二叉樹的特點(diǎn)、二叉樹節(jié)點(diǎn)的定義、查找最大和最小值等內(nèi)容,需要的朋友可以參考下
    2015-02-02
  • JavaScript的instanceof運(yùn)算符學(xué)習(xí)教程

    JavaScript的instanceof運(yùn)算符學(xué)習(xí)教程

    instanceof運(yùn)算符可以用來(lái)判斷某個(gè)構(gòu)造函數(shù)的prototype屬性所指向的對(duì)象是否存在于另外一個(gè)要檢測(cè)對(duì)象的原型鏈上,這里我們就來(lái)看一下JavaScript的instanceof運(yùn)算符學(xué)習(xí)教程
    2016-06-06
  • Javascript基礎(chǔ)教程之函數(shù)對(duì)象和屬性

    Javascript基礎(chǔ)教程之函數(shù)對(duì)象和屬性

    這篇文章主要介紹了Javascript基礎(chǔ)教程之函數(shù)對(duì)象和屬性,需要的朋友可以參考下
    2015-01-01
  • javascript的對(duì)話框詳解與參數(shù)

    javascript的對(duì)話框詳解與參數(shù)

    javascript的對(duì)話框詳解與參數(shù)...
    2007-03-03
  • 基于JavaScript 類的使用詳解

    基于JavaScript 類的使用詳解

    JavaScript里的Class(類),其實(shí)是通過(guò)Function來(lái)實(shí)現(xiàn)的。 我們通過(guò)字面量或者構(gòu)造函數(shù)來(lái)創(chuàng)建對(duì)象時(shí),其實(shí)都只是給特定的一個(gè)對(duì)象賦屬性和值。如果我們有多個(gè)對(duì)象,他們的屬性都一樣只是值不同,那就會(huì)寫很多重復(fù)的語(yǔ)句,這時(shí)候類就很好用了
    2013-05-05
  • JavaScript進(jìn)階教程(第二課續(xù))

    JavaScript進(jìn)階教程(第二課續(xù))

    JavaScript進(jìn)階教程(第二課續(xù))...
    2007-04-04
  • JavaScript中利用各種循環(huán)進(jìn)行遍歷的方式總結(jié)

    JavaScript中利用各種循環(huán)進(jìn)行遍歷的方式總結(jié)

    這篇文章主要介紹了JavaScript中利用各種循環(huán)進(jìn)行遍歷的方式總結(jié),是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • 深入理解Javascript中的自執(zhí)行匿名函數(shù)

    深入理解Javascript中的自執(zhí)行匿名函數(shù)

    下面小編就為大家?guī)?lái)一篇深入理解Javascript中的自執(zhí)行匿名函數(shù)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • javascript第一課

    javascript第一課

    javascript第一課...
    2007-02-02
  • 淺談javascript錯(cuò)誤處理

    淺談javascript錯(cuò)誤處理

    本文主要從前端開發(fā)者的角度談一談大多數(shù)前端開發(fā)者都會(huì)遇到的js錯(cuò)誤,對(duì)錯(cuò)誤產(chǎn)生的原因、發(fā)生階段,以及如何應(yīng)對(duì)錯(cuò)誤進(jìn)行分析、歸納和總結(jié),希望得到一些有益的結(jié)論用來(lái)指導(dǎo)日常開發(fā)工作。
    2019-08-08

最新評(píng)論