午夜精品久久久久久久99热-午夜精品久久久久-午夜精品成人毛片-午夜黄网站-国产日韩精品欧美一区视频-国产日韩精品欧美一区色

ajax前后臺傳json實例(web后端正確的返回JSON)

ajax前后臺傳json實例(web后端正確的返回JSON)

肇昂杰 2025-04-12 科技 63 次瀏覽 0個評論

在web開發中,前端和后端發生數據交換傳輸現在最常見的形式就是異步ajax交互,一般返回給js都是json,如何才是正確的返回呢?

前端代碼想要獲取JSON數據代碼如下:

$.get('/user-info.php', function(userInfo){

alert(userInfo);

alert(userInfo.name);

});

然后如果后端的user-info.php是這樣的代碼:

$userInfo = [

'id' => 1,

'name' => 'Jay'

];

echo json_encode($userInfo);

那么前端第一句alert出來的將會是一個JSON字符串,第2個alert將會顯示undefined

原因就是回調函數里的userInfo根本不是一個object,而是一個字符串,所以alert后就是原樣字符串顯示了,再alert(userInfo.name);的話,由于字符串沒有定義name屬性,所以得到的是一個undefined的結果值

為什么userInfo不是一個帶有id和name屬性的對象?因為PHP沒有發送http響應頭聲明響應的內容是json

其實PHP代碼在echo之前補充這么一句就可以了:

header('Content-type:application/json;charset=utf-8');

首先在沒有這句代碼的時候,瀏覽器抓到的網絡請求顯示響應頭是這樣的:

web后端正確的返回JSON

注意到Content-type部分是text/html;charset=utf-8了嗎?

而當PHP執行header('Content-type:application/json;charset=utf-8');的時候,就變成了application/json;charset=utf-8了

這就是HTTP報文響應內容的格式聲明,專業術語叫MIME類型

如果服務端說響應的格式是text/html,那前端當然認為這并不是JSON,所以當成HTML了,HTML其實就是一堆字符串嘛

所以在沒有發送json類型通知時,以下兩句話對于前端來說都是一樣的:

echo '{"id":1}';

//或者

echo '<div>html內容。。。<div>';

有人說可是上面那句echo輸出的是一個JSON字符串啊,不應該識別為JSON嗎?

那假設jQuery是你寫的,你怎么判斷第1個字符串是JSON字符串?這可是要費好多功夫的,你總不可能這么寫:

var content = xmlHttpRequest.responseText;

if(content.substr(0, 1) == '{'){

//是json

}

不然的話那后端返回{"id"這樣只有半截的內容你也認為是JSON啦?

其實人家判斷一個數據是不是JSON,是靠HTTP響應的MIME類型來判斷的,這才是標準的做法,也是HTTP協議的內容

其實如果PHP不發送header聲明MIME類型,只要將前端代碼換成這樣也能正常得到JSON:

$.ajax({

url : '/user-info.php',

dataType : 'json',

success : function(userInfo){

alert(userInfo);

alert(userInfo.name);

}

});

從jQuery的源代碼的ajaxConvert函數部分可以得知,當使用了$.ajax方法后,與$.get和$.post不同的是它這里聲明了一個dataType的屬性為json

簡單地說jQuery就是按照json的邏輯來解析服務端響應的內容,才不管你服務端的MIME類型是什么

但這只是前端的考量,其實首先服務端的做法就不標準,既對外聲明接口輸出的是JSON數據,卻又沒聲明對應的MIME類型

作為追求優秀的人,我們應該按照對應的類型補充對應的MIME類型報頭輸出才對,輸出JSON的接口總該執行一下

header('Content-type:application/json;charset=utf-8');

轉載請注明來自夕逆IT,本文標題:《ajax前后臺傳json實例(web后端正確的返回JSON)》

每一天,每一秒,你所做的決定都會改變你的人生!

發表評論

快捷回復:

評論列表 (暫無評論,63人圍觀)參與討論

還沒有評論,來說兩句吧...

主站蜘蛛池模板: 欧美在线观看第一页 | 男人天堂网2020 | 男人天堂2014 | 色婷婷激情 | 深爱五月综合网 | 日韩免费在线视频 | 亚洲精品福利视频 | 成人激情开心网 | 欧美日韩色视频在线观看 | 国产精品成人一区二区不卡 | 五月间天堂 | 色婷婷影院在线视频免费播放 | 永久免费看mv网站入口 | 中文字幕国产 | 亚洲综合免费 | 印度版色戒 | 丁香六月啪 | 亚洲免费人成在线视频观看 | 六月丁香深爱六月综合激情 | 一区二区三区不卡在线 | 久久国产精品一区二区三区 | 四虎成人免费视频 | 久久久久久99 | 久久婷婷五月综合色丁香 | 九九视频在线看精品 | 高清色本在线www | 亚一亚二乱码专区 | 一级域名网站在线观看 | 亚洲综合九九 | 婷婷欧美综合五月六月缴情 | 亚洲国产tv | 亚洲欧美小视频 | 亚洲男人的天堂久久精品 | 一区二区三区不卡在线 | 亚洲自拍第二页 | 午夜日韩在线 | 久久亚洲不卡一区二区 | 五月深爱婷婷 | 亚洲第一视频在线观看 | 久久精品国产69国产精品亚洲 | 免费羞羞网站视频 |