91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Ajax的問題(跨域)

發布時間:2020-07-23 18:56:56 來源:網絡 閱讀:1817 作者:kesungang 欄目:web開發

ajax往自己的域名訪問是可以,如果向別的域名訪問就會報錯。
這一版是請求發過去了,服務器也給返回數據了,但是瀏覽器會給報錯(瀏覽器遵:同源策略)。他的這個策略把ajax跨域發送請求時,再回來時候瀏覽器阻止了。

JSONP

jsonp 就是鉆空子,瀏覽器雖然禁止ajax跨域,但是允許script(src)的代碼不禁止,可以把這個用jquery CDN的方法
使用方法:

  • 發送:--->>在自己的頁面創建一個script標簽,讓它的src=‘http://baidu.com/?p=1’這樣鉆過去

https://www.cnblogs.com/xiaohuochai/p/6568039.html
這個博客寫的非常好

跨站練習

環境設置

啟動兩個項目一個端口為8001,一個為8000,端口8001提供數據。通過8000端口的程序來獲取8001提供的數據

8001的代碼
from django.shortcuts import render,HttpResponse
import json
def user_jsonp(request):
    print('請求來了。。。')
    user_list=[
        'zhang','wang','li','zhao'
    ]
    temp = json.dumps(user_list)
    return HttpResponse(temp)
8000的代碼
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>

這個時候兩個項目啟動起來后,8000頁面點擊獲取來獲取8001的數據時候是出錯的(瀏覽器的同源策略)報錯如下:
(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.
這個就是同源策略阻止了ajax的訪問。為了解決這個問題,我們可以送script的js的方式來解決
如下面的代碼:

    function showdata() {
        var tag = document.createElement('script');
        tag.src='http://127.0.0.1/8001/user_jsonp/';
        document.head.appendChild(tag)
    }

這里通過scirpt的方式已經跨過站了,數據已經存儲到了內存中,下面我們如何從內存里面拿到8001的值那?如果這里有一個變量的換,我們是可以通過變量來獲取的 ,通過這個思路,出現了下面的這個代碼
數據端8001這邊在返回的時候返回一個fun(xxx)這么類型的一個字段,前端來獲取這個
8001代碼:

from django.shortcuts import render,HttpResponse
import json
def user_jsonp(request):
    v = request.GET.get('funname')
    print('請求來了。。。')
    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)#這里返回的是一個bbb(xx),然后bbb就會執行下面的bbb函數
    }
    function bbb(arg) {
        console.log(arg)
    }

現在大家默認函數會是callback

通過ajax 實現jsonp的方式

Ajax的問題(跨域)

jsonp只能通過get方式,你寫了post,內部還是get請求。而且是雙方約定的

cros跨站

http://www.cnblogs.com/wupeiqi/articles/5703697.html

cros 就是服務端返回的字符串帶著一個字段,告訴瀏覽器不要阻止。

        簡單請求:

            def new_users(request):
                obj = HttpResponse('返回內容')
                obj['Access-Control-Allow-Origin'] = "*"
                return obj
        復雜請求:
            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
        其他:
            - 任何請求
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

灵丘县| 徐水县| 通城县| 忻州市| 霍邱县| 广丰县| 准格尔旗| 永川市| 子长县| 庆城县| 泸州市| 临武县| 满洲里市| 陕西省| 阳东县| 嘉兴市| 昂仁县| 齐齐哈尔市| 潼关县| 柳林县| 合川市| 和田市| 溧水县| 龙山县| 彰武县| 泊头市| 河津市| 永安市| 商城县| 吉安县| 敦煌市| 红桥区| 离岛区| 陇西县| 宜都市| 百色市| 玉山县| 印江| 邻水| 西峡县| 砀山县|