Node.js返回JSONP詳解
在使用JQuery的Ajax從服務(wù)器請求數(shù)據(jù)或者向服務(wù)器發(fā)送數(shù)據(jù)時(shí)常常會(huì)遇到跨域無法請求的錯(cuò)誤,常用的解決辦法就是在Ajax中使用JSONP。基于安全性考慮,瀏覽器會(huì)存在同源策略,然而<script/>標(biāo)簽卻具有跨域訪問數(shù)據(jù)的能力,這就是JSONP工作的基本原理。有關(guān)同源策略以及什么是JSONP。
在Node.js中實(shí)現(xiàn)JSONP非常簡單,通過下面的代碼我們從服務(wù)器返回并運(yùn)行一個(gè)JavaScript函數(shù),這個(gè)JavaScript函數(shù)已經(jīng)在調(diào)用方提前被定義好了,于是當(dāng)它被返回的時(shí)候就自動(dòng)執(zhí)行了。
var express = require('express');
var router = express.Router();
router.get('/getinfo', function(req, res, next) {
var _callback = req.query.callback;
var _data = { email: 'example@163.com', name: 'jaxu' };
if (_callback){
res.type('text/javascript');
res.send(_callback + '(' + JSON.stringify(_data) + ')');
}
else{
res.json(_data);
}
});
module.exports = router;
代碼中必須規(guī)定從服務(wù)器返回?cái)?shù)據(jù)的類型,代碼res.type('text/javascript')被加在返回的數(shù)據(jù)之前用于告訴瀏覽器這是一段JavaScript代碼。
前端頁面通過JQuery調(diào)用:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>jsonp test</title>
<script src="/bower_components/jquery/dist/jquery.js"></script>
</head>
<body>
<input type="button" value="click" id="btn">
<script type="text/javascript">
$(function(){
$('#btn').on('click', function(){
$.get('http://anothersite/api/getinfo', function(d){
console.log(d);
}, 'jsonp');
});
});
</script>
</body>
</html>
運(yùn)行代碼,點(diǎn)擊按鈕,在瀏覽器的console面板總我們可以看到從遠(yuǎn)程服務(wù)器返回的json對象。

以上這篇Node.js返回JSONP詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Node.js應(yīng)用設(shè)置安全的沙箱環(huán)境
這篇文章主要介紹了Node.js應(yīng)用設(shè)置安全的沙箱環(huán)境的方法以及注意事項(xiàng),對此有需要的朋友可以參考學(xué)習(xí)下。2018-04-04
nodejs實(shí)現(xiàn)解析xml字符串為對象的方法示例
這篇文章主要介紹了nodejs實(shí)現(xiàn)解析xml字符串為對象的方法,涉及nodejs針對xml格式字符串的解析與轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
如何使用axios庫在Node.js中進(jìn)行代理請求(實(shí)踐案例)
axios是一個(gè)強(qiáng)大的基于Promise的HTTP客戶端,它在瀏覽器和Node.js環(huán)境中均可使用,本文將介紹如何充分利用axios庫,在Node.js中進(jìn)行代理請求的最佳實(shí)踐,并通過一個(gè)實(shí)際案例來展示其應(yīng)用,感興趣的朋友一起看看吧2024-03-03
node.js 微信開發(fā)之定時(shí)獲取access_token
本文給大家分享的是在使用node.js做微信開發(fā)的過程中如何定時(shí)獲取access_token的方法,有需要的小伙伴可以參考下2020-02-02

