當 協議不一樣或者域名/ip不一樣或者端口號不一樣 , 都不算是同源javascript
這時候 源生的ajax 就不能進行數據請求了php
JSONP json with paddingcss
在平時的開發中也發現了 ,當咱們請求 js, css,圖片 等資源的時候 不管是否是本地,國外的都行,哪的都行。html
用script標籤來請求 跨域的資源就是 jsonpjava
不用其餘標籤由於 script標籤請求來的內容都會被當作js代碼,json 是源生js支持的數據類型,而且json 能夠表達複雜的數據,因此天生的就是有天賦ajax
jsonp.js 咱們就在本地 用fille直接打開呆這段js 的htmljson
function jsonpCallback (result) { console.log(result); } var JSONP = document.createElement('script'); JSONP.type = 'text/javascript'; JSONP.src = "http://localhost/ajaxphp/result.php?callback=jsonpCallback"; document.getElementsByTagName('head')[0].appendChild(JSONP); //? name&value 這個url就是模擬 get請求 目標php文件
result.php 運行本地的服務器 服務器上的 php文件跨域
<?php $arr = Array('a'=>1,'b'=>2,'c'=>3); $result = json_encode($arr); $callback = $_GET['callback']; echo $callback."($result)"; ?>
上面這兩個文件 是跨域的 可是仍然能夠順利的訪問服務器
jQuery中的 ajax 是封裝過的 就是將正常的ajax和jsonp封裝到了一塊兒,其實跨域的仍是 jsonpapp