ajax往自己的域名訪問(wèn)是可以,如果向別的域名訪問(wèn)就會(huì)報(bào)錯(cuò)。
這一版是請(qǐng)求發(fā)過(guò)去了,服務(wù)器也給返回?cái)?shù)據(jù)了,但是瀏覽器會(huì)給報(bào)錯(cuò)(瀏覽器遵:同源策略)。他的這個(gè)策略把a(bǔ)jax跨域發(fā)送請(qǐng)求時(shí),再回來(lái)時(shí)候?yàn)g覽器阻止了。
成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、互助網(wǎng)絡(luò)推廣、微信平臺(tái)小程序開發(fā)、互助網(wǎng)絡(luò)營(yíng)銷、互助企業(yè)策劃、互助品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供互助建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:muchs.cn
jsonp 就是鉆空子,瀏覽器雖然禁止ajax跨域,但是允許script(src)的代碼不禁止,可以把這個(gè)用jquery cdn的方法
使用方法:
https://www.cnblogs.com/xiaohuochai/p/6568039.html
這個(gè)博客寫的非常好
啟動(dòng)兩個(gè)項(xiàng)目一個(gè)端口為8001,一個(gè)為8000,端口8001提供數(shù)據(jù)。通過(guò)8000端口的程序來(lái)獲取8001提供的數(shù)據(jù)
from django.shortcuts import render,HttpResponse
import json
def user_jsonp(request):
print('請(qǐng)求來(lái)了。。。')
user_list=[
'zhang','wang','li','zhao'
]
temp = json.dumps(user_list)
return HttpResponse(temp)
def user(request):
return render(request,'user.html')
<body>
<input type="button" value="獲取信息" onclick="showdata();">
<div>
<ul id="user_list">
</ul>
</div>
<script>
function showdata() {
xhr = new XMLHttpRequest();
xhr.onreadystatechange=function () {
if(xhr.readyState==4){
var content = xhr.responseText;
console.log(content)
}
}
xhr.open('GET','http://127.0.0.1:8001/user_jsonp/');
xhr.send()
}
</script>
</body>
這個(gè)時(shí)候兩個(gè)項(xiàng)目啟動(dòng)起來(lái)后,8000頁(yè)面點(diǎn)擊獲取來(lái)獲取8001的數(shù)據(jù)時(shí)候是出錯(cuò)的(瀏覽器的同源策略)報(bào)錯(cuò)如下:(index):1 Failed to load http://127.0.0.1:8001/user_jsonp/: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:8000' is therefore not allowed access.
這個(gè)就是同源策略阻止了ajax的訪問(wèn)。為了解決這個(gè)問(wèn)題,我們可以送script的js的方式來(lái)解決
如下面的代碼:
function showdata() {
var tag = document.createElement('script');
tag.src='http://127.0.0.1/8001/user_jsonp/';
document.head.appendChild(tag)
}
這里通過(guò)scirpt的方式已經(jīng)跨過(guò)站了,數(shù)據(jù)已經(jīng)存儲(chǔ)到了內(nèi)存中,下面我們?nèi)绾螐膬?nèi)存里面拿到8001的值那?如果這里有一個(gè)變量的換,我們是可以通過(guò)變量來(lái)獲取的 ,通過(guò)這個(gè)思路,出現(xiàn)了下面的這個(gè)代碼
數(shù)據(jù)端8001這邊在返回的時(shí)候返回一個(gè)fun(xxx)這么類型的一個(gè)字段,前端來(lái)獲取這個(gè)
8001代碼:
from django.shortcuts import render,HttpResponse
import json
def user_jsonp(request):
v = request.GET.get('funname')
print('請(qǐng)求來(lái)了。。。')
user_list=[
'zhang','wang','li','zhao'
]
# temp = json.dumps(user_list)
user_list_str = json.dumps(user_list)
temp = "%s(%s)"%(v,user_list_str)
return HttpResponse(temp)
8000前端獲取的8001的返回后,做如下處理
function showdata() {
var tag = document.createElement('script');
tag.src='http://127.0.0.1/8001/user_jsonp/?funname=bbb';
document.head.appendChild(tag)#這里返回的是一個(gè)bbb(xx),然后bbb就會(huì)執(zhí)行下面的bbb函數(shù)
}
function bbb(arg) {
console.log(arg)
}
現(xiàn)在大家默認(rèn)函數(shù)會(huì)是callback
jsonp只能通過(guò)get方式,你寫了post,內(nèi)部還是get請(qǐng)求。而且是雙方約定的
http://www.cnblogs.com/wupeiqi/articles/5703697.html
cros 就是服務(wù)端返回的字符串帶著一個(gè)字段,告訴瀏覽器不要阻止。
簡(jiǎn)單請(qǐng)求:
def new_users(request):
obj = HttpResponse('返回內(nèi)容')
obj['Access-Control-Allow-Origin'] = "*"
return obj
復(fù)雜請(qǐng)求:
def new_users(request):
if request.method == "OPTIONS":
obj = HttpResponse()
obj['Access-Control-Allow-Origin'] = "*"
obj['Access-Control-Allow-Methods'] = "DELETE"
return obj
obj = HttpResponse('asdfasdf')
obj['Access-Control-Allow-Origin'] = "*"
return obj
其他:
- 任何請(qǐng)求
文章名稱:Ajax的問(wèn)題(跨域)
URL分享:http://muchs.cn/article44/gjgdhe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)建站、靜態(tài)網(wǎng)站、網(wǎng)站收錄、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)