javascript 跨域問題以及解決辦法
javascript 跨域問題以及解決辦法
什么是跨域問題?
跨域這個問題是由于瀏覽器的同源策略引起的,請求的URL地址,必須與瀏覽器的URL是相同協(xié)議、相同域名、相同端口的,否則是不允許訪問的
| 瀏覽器URL | 要訪問的URL | 結(jié)果 |
|---|---|---|
| http://www.123.com/index | http://www.123.com/server | 成功 |
| http://www.123.com/index | http://www.456.com/server | 域名不相同,跨域 |
| http://www.123.com:8080/index | http://www.123.com:8888/index.htm | 端口不同,跨域 |
| http://www.123.com/index | https://www.123.com/index | 協(xié)議不同,跨域 |
解決辦法
凡是擁有src屬性的標(biāo)簽都可以跨域,比如script、img、iframe標(biāo)簽
JSONP
JSONP就是應(yīng)用了script標(biāo)簽,JSONP的全稱是JSON With Padding,JSONP由兩部分組成,回掉函數(shù)和數(shù)據(jù),回掉函數(shù)就是當(dāng)響應(yīng)到來時應(yīng)該在頁面中調(diào)用的函數(shù),回掉函數(shù)的名字是在請求中指定的,而數(shù)據(jù)就是傳入回掉函數(shù)的JSON數(shù)據(jù)
例子:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function jsonCallback(data){
alert(data);
};
var url = "http://localhost:8888/test?callback=jsonCallback";
var script = document.createElement('script');
script.type = "text/javascript";
script.setAttribute('src', url);
document.getElementsByTagName('head')[0].appendChild(script);
</script>
</head>
<body>
</body>
</html>
缺點:確認(rèn)JSONP請求是否失敗并不容易
安全性的問題,JSONP是從其他域加載代碼執(zhí)行,所以要確定其可靠性
以上就是javascript 跨域問題以及解決辦法的講解,大家如果 有疑問可以留言討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
knockoutjs模板實現(xiàn)樹形結(jié)構(gòu)列表
這篇文章主要介紹了knockoutjs模板實現(xiàn)樹形結(jié)構(gòu)列表的實現(xiàn)代碼,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2017-07-07
JavaScript 數(shù)組展平方法: flat() 和 flatMap()詳解
從 ES2019 中開始引入了一種扁平化數(shù)組的新方法,可以展平任何深度的數(shù)組,這篇文章主要介紹了JavaScript 數(shù)組展平方法: flat() 和 flatMap()詳解,需要的朋友可以參考下2023-06-06
jQuery ajax(復(fù)習(xí))—Baidu ajax request分離版
你沒有看錯標(biāo)題,本文的確是在講Baidu ajax,不過是很久很久以前的版本了,我們先分析一段簡單的ajax代碼,來自早期的百度七巧板項目通過這個來先復(fù)習(xí)一遍ajax的知識2013-01-01
js中通過getElementsByName訪問name集合對象的方法
下面小編就為大家?guī)硪黄猨s中通過getElementsByName訪問name集合對象的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10

