国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 php教程 PHP開發(fā) ajax設(shè)計(jì)方案

ajax設(shè)計(jì)方案

Nov 30, 2016 pm 02:32 PM
ajax

報(bào)告,我要說話! xp被歷史淘汰了,IE6 say goodbye了,太TM開心了,從此不要兼容IE6了,哈哈哈哈哈哈

報(bào)告,我要說話! IE這sb為啥不早點(diǎn)被殺呢,找工作聽說要兼容IE,立刻軟了,唉唉唉唉唉

報(bào)告,我要說話! Jquery太豐富了,老子只用了幾個(gè)功能,媽的,太不劃算了,啊啊啊啊啊啊

......

好了,言歸正傳。對(duì)於想到整理ajax設(shè)計(jì)方案,原因如下:

從資源合理利用的角度以及網(wǎng)站優(yōu)化角度去想,每次為了那幾個(gè)功能,去引用一個(gè)框架,不劃算

拜讀了w3c的ajax的設(shè)計(jì)方案,包括level1和level2的規(guī)範(fàn),有種豁然開朗的感覺

有朋友遇到ajax的跨域方案,各種糾結(jié)在心裡,導(dǎo)致內(nèi)心不能舒暢

自己的框架底層也要需要用到ajax的基礎(chǔ)功能,(get post請(qǐng)求,對(duì)於level2的上傳暫時(shí)沒用到)

最關(guān)鍵的也是之前對(duì)這塊概念十分模糊,所以開始整理ajax這塊的設(shè)計(jì)方案

?

介紹一些概念:

?

介紹一些概念:

?

介紹一些概念:

?

介紹一些概念:

?


介紹一些概念:

?

介紹一些概念:

瀏覽器的同源策略:瀏覽器最基本的安全功能,同源是指,域名,協(xié)議,端口相同(所以我寫的接口部署端口分別為1122和2211即不是同源,屬於跨域)

ajax :是一種技術(shù)方案,依賴的是CSS/HTML/Javascript,最核心依賴是瀏覽器提供的XMLHttpRequest對(duì)象,這個(gè)對(duì)象使得瀏覽器可以發(fā)出HTTP請(qǐng)求與接收HTTP響應(yīng)。

XMLHttpRequest Level 1主要存在以下缺點(diǎn):

ajax設(shè)計(jì)方案

  受同源策略的限制,不能發(fā)送跨域請(qǐng)求;

? ?? 無法傳送二進(jìn)位檔案(如圖片、圖片、純文字資料、純音訊資料等;

? ? ? 發(fā)送和獲取資料的過程中,無法即時(shí)取得進(jìn)度資訊,只能判斷是否完成;

XMLHttpRequest Level 2中新增了下列功能:

?端可以在傳送服務(wù)端的情況下;

  支援發(fā)送和接收二進(jìn)位資料;

  新增formData對(duì)象,支援傳送表單資料;

  發(fā)送和取得資料時(shí),可以取得時(shí)間點(diǎn)填相容性如下:

nginx:是一個(gè)高效能的HTTP和反向代理伺服器

IIS:微軟開發(fā)的伺服器,window系統(tǒng)自帶

?

開始準(zhǔn)備如下:純

nginx反向代理伺服器(前後端分離用)

後臺(tái)2套介面(連接埠:1122,連接埠:2211) ?PS:一份必須支援跨網(wǎng)域請(qǐng)求

IIS伺服器(部署後臺(tái)介面)

插件postman (介面測(cè)試)

IE、chrome、firefox、Opera、safari、edge 6大瀏覽器,做相容性測(cè)試

?

XMLHttpRequest傳送請(qǐng)求步驟:

實(shí)例化XMLHttpRequest(IE996p ('Microsoft.XMLHTTP'))取得一個(gè)實(shí)例

透過實(shí)例open一個(gè)請(qǐng)求,設(shè)定發(fā)送類型和介面以及同異步

如有需要配置報(bào)文,以及各種事件(success,error,timeout等)

呼叫實(shí)例的send方法,發(fā)送http/https的請(qǐng)求

伺服器回調(diào),客戶端接收,並做回應(yīng)處理

?

程式碼關(guān)鍵點(diǎn)如下:

//創(chuàng)建xhr對(duì)象
    var xhr = createXhrObject();

    //針對(duì)某些特定版本的mozillar瀏覽器的BUG進(jìn)行修正
    xhr.overrideMimeType?(xhr.overrideMimeType("text/javascript")):(null);

    //針對(duì)IE8的xhr做處理 PS:ie8下的xhr無xhr.onload事件,所以這里做判斷
    xhr.onload===undefined?(xhr.xhr_ie8=true):(xhr.xhr_ie8=false);

    //參數(shù)處理(get和post),包括xhr.open     get:拼接好url再open   post:先open,再設(shè)置其他參數(shù)
    ajaxSetting.data === ""?(null):(xhr = dealWithParam(ajaxSetting,this,xhr));

    //設(shè)置超時(shí)時(shí)間(只有異步請(qǐng)求才有超時(shí)時(shí)間)
    ajaxParam.async?(xhr.timeout = ajaxSetting.time):(null);

    //設(shè)置http協(xié)議的頭部
    each(ajaxSetting.requestHeader,function(item,index){xhr.setRequestHeader(index,item)});

    //判斷并設(shè)置跨域頭部信息
    (ajaxSetting.crossDomain)?(xhr = addCoreHeader(xhr,ajaxSetting)):(null);

    //onload事件(IE8下沒有該事件)
    xhr.onload = function(e) {
        if(this.status == 200||this.status == 304){
            ajaxSetting.dataType.toUpperCase() == "JSON"?(ajaxSetting.success(JSON.parse(xhr.responseText))):(ajaxSetting.success(xhr.responseText));
        }else{
            /*
             *  這邊為了兼容IE8、9的問題,以及請(qǐng)求完成而造成的其他錯(cuò)誤,比如404等
             *   如果跨域請(qǐng)求在IE8、9下跨域失敗不走onerror方法
             *       其他支持了Level 2 的版本 直接走onerror
             * */
            ajaxSetting.error(e.currentTarget.status, e.currentTarget.statusText);
        }
    };

    //xmlhttprequest每次變化一個(gè)狀態(tài)所監(jiān)控的事件(可拓展)
    xhr.onreadystatechange = function(){
        switch(xhr.readyState){
            case 1://打開
                //do something
                break;
            case 2://獲取header
                //do something
                break;
            case 3://請(qǐng)求
                //do something
                break;
            case 4://完成
                //在ie8下面,無xhr的onload事件,只能放在此處處理回調(diào)結(jié)果
                xhr.xhr_ie8?((xhr.status == 200 || xhr.status == 304)?(ajaxSetting.dataType.toUpperCase() == "JSON"?(ajaxSetting.success(JSON.parse(xhr.responseText))):(ajaxSetting.success(xhr.responseText))):(null)):(null);
                break;
        };
    };

    //ontimeout超時(shí)事件
    xhr.ontimeout = function(e){
        ajaxSetting.timeout(999,e?(e.type):("timeout"));   //IE8 沒有e參數(shù)
        xhr.abort();  //關(guān)閉請(qǐng)求
    };

    //錯(cuò)誤事件,直接ajax失敗,而不走onload事件
    xhr.onerror = function(e){
        ajaxSetting.error();
    };

    xhr.send((function(result){this.postParam == undefined?(result =null):(result=this.postParam);return result;})(this.postParam));

測(cè)試程式碼如下:

前端測(cè)試程式碼

? ?

前端跨域測(cè)試程式碼

ajax.post("/api/ajax1/ajaxT1/",{"name":"測(cè)試異步post請(qǐng)求","age":"success"},function(data){alert(data)});  //該接口在1122上

? ?

ajax設(shè)計(jì)方案後端跨域介面碼

ajax.post_cross("http://192.168.0.3:2211/api/weixin/ajaxT2/",{"name":"測(cè)試跨域post請(qǐng)求","age":"success"},function(data){alert(data)});

?

後端跨域介面碼ajax設(shè)計(jì)方案

/// <summary>
   /// 測(cè)試跨域請(qǐng)求
   /// </summary>
   /// <param name="module"></param>
   /// <returns></returns>
   [Route("ajaxT2")]
   public String kuaAjaxT2([FromBody]TModule module)
   {
       String result = "跨域post傳輸成功:"+module.name+"-"+module.age;
       return result;
   }

?

ajax設(shè)計(jì)方案下面是各種瀏覽器的測(cè)試結(jié)果(僅提供同源post請(qǐng)求和跨域post請(qǐng)求):

同源測(cè)試:

chromeajax設(shè)計(jì)方案

IE8-9ajax設(shè)計(jì)方案

ajax設(shè)計(jì)方案

????opera??????????safari??

ajax設(shè)計(jì)方案

edge

ajax設(shè)計(jì)方案

?

跨域測(cè)試:

chrome

ajax設(shè)計(jì)方案

ajax設(shè)計(jì)方案

firefox

ajax設(shè)計(jì)方案

opera

ajax設(shè)計(jì)方案

safari

ajax設(shè)計(jì)方案

edge

ajax設(shè)計(jì)方案

?具體程式碼已封裝成一個(gè)js庫,供大家根據(jù)專案需求,自己開發(fā)客製化,不過我已經(jīng)封裝了一些請(qǐng)求: ajax。 -- ?ajax.post_cross

ajax設(shè)計(jì)方案通用設(shè)定請(qǐng)求?-- ?ajax.common

?

程式碼和測(cè)試頁面已上傳github,後臺(tái)介面如果大家想測(cè)試的話,就自己寫一個(gè)把,後臺(tái)壓縮程式碼就不上傳了,關(guān)鍵碼完了只有4K! ajax設(shè)計(jì)方案

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

PHP 與 Ajax:建立一個(gè)自動(dòng)完成建議引擎 PHP 與 Ajax:建立一個(gè)自動(dòng)完成建議引擎 Jun 02, 2024 pm 08:39 PM

使用PHP和Ajax建置自動(dòng)完成建議引擎:伺服器端腳本:處理Ajax請(qǐng)求並傳回建議(autocomplete.php)??蛻舳四_本:發(fā)送Ajax請(qǐng)求並顯示建議(autocomplete.js)。實(shí)戰(zhàn)案例:在HTML頁面中包含腳本並指定search-input元素識(shí)別碼。

解決jQuery AJAX請(qǐng)求403錯(cuò)誤的方法 解決jQuery AJAX請(qǐng)求403錯(cuò)誤的方法 Feb 19, 2024 pm 05:55 PM

jQuery是一個(gè)受歡迎的JavaScript函式庫,用來簡化客戶端端的開發(fā)。而AJAX則是在不重新載入整個(gè)網(wǎng)頁的情況下,透過發(fā)送非同步請(qǐng)求和與伺服器互動(dòng)的技術(shù)。然而在使用jQuery進(jìn)行AJAX請(qǐng)求時(shí),有時(shí)會(huì)遇到403錯(cuò)誤。 403錯(cuò)誤通常是伺服器禁止存取的錯(cuò)誤,可能是由於安全性原則或權(quán)限問題導(dǎo)致的。在本文中,我們將討論如何解決jQueryAJAX請(qǐng)求遭遇403錯(cuò)誤

解決jQuery AJAX請(qǐng)求遇到403錯(cuò)誤的方法 解決jQuery AJAX請(qǐng)求遇到403錯(cuò)誤的方法 Feb 20, 2024 am 10:07 AM

標(biāo)題:解決jQueryAJAX請(qǐng)求出現(xiàn)403錯(cuò)誤的方法及程式碼範(fàn)例403錯(cuò)誤是指伺服器禁止存取資源的請(qǐng)求,通常會(huì)導(dǎo)致出現(xiàn)這個(gè)錯(cuò)誤的原因是請(qǐng)求缺少權(quán)限或被伺服器拒絕。在進(jìn)行jQueryAJAX請(qǐng)求時(shí),有時(shí)會(huì)遇到這種情況,本文將介紹如何解決這個(gè)問題,並提供程式碼範(fàn)例。解決方法:檢查權(quán)限:首先要確保請(qǐng)求的URL位址是正確的,同時(shí)驗(yàn)證是否有足夠的權(quán)限來存取該資

如何解決jQuery AJAX報(bào)錯(cuò)403的問題? 如何解決jQuery AJAX報(bào)錯(cuò)403的問題? Feb 23, 2024 pm 04:27 PM

如何解決jQueryAJAX報(bào)錯(cuò)403的問題?在開發(fā)網(wǎng)頁應(yīng)用程式時(shí),經(jīng)常會(huì)使用jQuery來發(fā)送非同步請(qǐng)求。然而,有時(shí)在使用jQueryAJAX時(shí)可能會(huì)遇到錯(cuò)誤代碼403,表示伺服器禁止存取。這種情況通常是由伺服器端的安全性設(shè)定所導(dǎo)致的,但可以透過一些方法來解決這個(gè)問題。本文將介紹如何解決jQueryAJAX報(bào)錯(cuò)403的問題,並提供具體的程式碼範(fàn)例。一、使

PHP 與 Ajax:建立動(dòng)態(tài)載入內(nèi)容的解決方案 PHP 與 Ajax:建立動(dòng)態(tài)載入內(nèi)容的解決方案 Jun 06, 2024 pm 01:12 PM

Ajax(非同步JavaScript和XML)允許在不重新載入頁面情況下新增動(dòng)態(tài)內(nèi)容。使用PHP和Ajax,您可以動(dòng)態(tài)載入產(chǎn)品清單:HTML建立一個(gè)帶有容器元素的頁面,Ajax請(qǐng)求載入資料後將資料加入到該元素中。 JavaScript使用Ajax透過XMLHttpRequest向伺服器傳送請(qǐng)求,從伺服器取得JSON格式的產(chǎn)品資料。 PHP使用MySQL從資料庫查詢產(chǎn)品數(shù)據(jù),並將其編碼為JSON格式。 JavaScript解析JSON數(shù)據(jù),並將其顯示在頁面容器中。點(diǎn)選按鈕觸發(fā)Ajax請(qǐng)求,載入產(chǎn)品清單。

如何使用Ajax從PHP方法取得變數(shù)? 如何使用Ajax從PHP方法取得變數(shù)? Mar 09, 2024 pm 05:36 PM

使用Ajax從PHP方法取得變數(shù)是Web開發(fā)中常見的場(chǎng)景,透過Ajax可以實(shí)作頁面無需刷新即可動(dòng)態(tài)取得資料。在本文中,將介紹如何使用Ajax從PHP方法中取得變量,並提供具體的程式碼範(fàn)例。首先,我們需要寫一個(gè)PHP檔案來處理Ajax請(qǐng)求,並傳回所需的變數(shù)。下面是一個(gè)簡單的PHP檔案getData.php的範(fàn)例程式碼:

PHP 與 Ajax:提升 Ajax 安全性的方法 PHP 與 Ajax:提升 Ajax 安全性的方法 Jun 01, 2024 am 09:34 AM

為了提升Ajax安全性,有幾種方法:CSRF保護(hù):產(chǎn)生令牌並將其傳送到客戶端,在請(qǐng)求中新增至伺服器端進(jìn)行驗(yàn)證。 XSS保護(hù):使用htmlspecialchars()過濾輸入,防止惡意腳本注入。 Content-Security-Policy頭:限制惡意資源加載,指定允許載入腳本和樣式表的來源。驗(yàn)證伺服器端輸入:驗(yàn)證從Ajax請(qǐng)求接收的輸入,防止攻擊者利用輸入漏洞。使用安全Ajax函式庫:利用jQuery等函式庫提供的自動(dòng)CSRF保護(hù)模組。

ajax版本有哪些 ajax版本有哪些 Nov 22, 2023 pm 02:00 PM

ajax不是一個(gè)特定的版本,而是一種使用多種技術(shù)的集合來非同步載入和更新網(wǎng)頁內(nèi)容的技術(shù)。 ajax沒有特定的版本號(hào),但是有一些ajax的變體或擴(kuò)充:1、jQuery AJAX;2、Axios;3、Fetch API;4、JSONP;5、XMLHttpRequest Level 2;6、WebSockets;7、Server-Sent Events;8、GraphQL等等。

See all articles