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

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

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

Nov 30, 2016 pm 02:32 PM
ajax

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

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

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

......

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

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

拜讀了w3c的ajax的設(shè)計(jì)方案,包括level1和level2的規(guī)范,有種豁然開(kāi)朗的感覺(jué)

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

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

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

?

介紹一些概念:

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

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

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


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

? ? ? 不能發(fā)送二進(jìn)制文件(如圖片、視頻、音頻等),只能發(fā)送純文本數(shù)據(jù);

? ? ? 發(fā)送和獲取數(shù)據(jù)的過(guò)程中,無(wú)法實(shí)時(shí)獲取進(jìn)度信息,只能判斷是否完成;

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


  可以發(fā)送跨域請(qǐng)求,在服務(wù)端允許的情況下;

  支持發(fā)送和接收二進(jìn)制數(shù)據(jù);

  新增formData對(duì)象,支持發(fā)送表單數(shù)據(jù);

  發(fā)送和獲取數(shù)據(jù)時(shí),可以獲取進(jìn)度信息;

  可以設(shè)置請(qǐng)求的超時(shí)時(shí)間;

XMLHttpRequest 兼容性如下:

weirui1590_1480483470530_59.png

nginx:是一個(gè)高性能的HTTP和反向代理服務(wù)器

IIS:微軟開(kāi)發(fā)的的服務(wù)器,window系統(tǒng)自帶

?

開(kāi)始準(zhǔn)備如下:

純前端代碼

nginx反向代理服務(wù)器(前后端分離用)

后臺(tái)2套接口(端口:1122,端口:2211) ?PS:一份必須支持跨域請(qǐng)求

IIS服務(wù)器(部署后臺(tái)接口)

chrome插件postman(接口測(cè)試)

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

?

XMLHttpRequest發(fā)送請(qǐng)求步驟:

實(shí)例化XMLHttpRequest對(duì)象(IE8-9是微軟封裝的ActiveXObject('Microsoft.XMLHTTP'))獲得一個(gè)實(shí)例

通過(guò)實(shí)例open一個(gè)請(qǐng)求,設(shè)置發(fā)送類(lèi)型和接口以及同異步

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

調(diào)用實(shí)例的send方法,發(fā)送http/https的請(qǐng)求

服務(wù)器回調(diào),客戶(hù)端接收,并做響應(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無(wú)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下沒(méi)有該事件)
    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的問(wèn)題,以及請(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://打開(kāi)
                //do something
                break;
            case 2://獲取header
                //do something
                break;
            case 3://請(qǐng)求
                //do something
                break;
            case 4://完成
                //在ie8下面,無(wú)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 沒(méi)有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è)試代碼

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

前端跨域測(cè)試代碼

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

后端跨域接口代碼

/// <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;
   }

后端同源接口代碼

/// <summary>
/// 測(cè)試ajax同源請(qǐng)求
/// </summary>
/// <param qwer="code"></param>
/// <returns>result</returns>
[Route("ajaxT2")]
public String GetkuaAjaxT1(string name,string age)
{
    String result = "1J跨域成功:" + name + "-" + age;
    return result;
}


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

同源測(cè)試:

chrome

weirui1590_1480483470530_59.png

IE8-9

weirui1590_1480483470530_59.png

weirui1590_1480483470530_59.png

IE10+

weirui1590_1480483470530_59.png

firefox

weirui1590_1480483470530_59.png

opera

weirui1590_1480483470530_59.png

safari

weirui1590_1480483470530_59.png

edge

weirui1590_1480483470530_59.png

?

跨域測(cè)試:

chrome

weirui1590_1480483470530_59.png

IE8-9

weirui1590_1480483470530_59.png

weirui1590_1480483470530_59.png

IE10+

weirui1590_1480483470530_59.png

firefox

weirui1590_1480483470530_59.png

opera

weirui1590_1480483470530_59.png

safari

weirui1590_1480483470530_59.png

edge

weirui1590_1480483470530_59.png

?具體代碼已封裝成一個(gè)js庫(kù),供大家根據(jù)項(xiàng)目需求,自己開(kāi)發(fā)定制,不過(guò)我已經(jīng)封裝了一些常用請(qǐng)求:

異步get請(qǐng)求 ?-- ?ajax.get

異步post請(qǐng)求 ?-- ?ajax.post

同步get請(qǐng)求 ?-- ?ajax.get_sync

同步post請(qǐng)求 ?-- ?ajax.post_sync

跨域get請(qǐng)求 ?-- ?ajax.get_cross

跨域post請(qǐng)求 ?-- ?ajax.post_cross

通用配置請(qǐng)求 ?-- ?ajax.common

?

代碼和測(cè)試頁(yè)面已上傳github,后臺(tái)接口如果大家想測(cè)試的話(huà),就自己寫(xiě)一個(gè)把,后臺(tái)代碼就不上傳了,關(guān)鍵壓縮完了只有4K!


本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系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

用于從照片中去除衣服的在線(xiàn)人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

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集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門(mén)話(huà)題

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

使用PHP和Ajax構(gòu)建自動(dòng)完成建議引擎:服務(wù)器端腳本:處理Ajax請(qǐng)求并返回建議(autocomplete.php)??蛻?hù)端腳本:發(fā)送Ajax請(qǐng)求并顯示建議(autocomplete.js)。實(shí)戰(zhàn)案例:在HTML頁(yè)面中包含腳本并指定search-input元素標(biāo)識(shí)符。

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

jQuery是一個(gè)流行的JavaScript庫(kù),用于簡(jiǎn)化客戶(hù)端端的開(kāi)發(fā)。而AJAX則是在不重新加載整個(gè)網(wǎng)頁(yè)的情況下,通過(guò)發(fā)送異步請(qǐng)求和與服務(wù)器交互的技術(shù)。然而在使用jQuery進(jìn)行AJAX請(qǐng)求時(shí),有時(shí)會(huì)遇到403錯(cuò)誤。403錯(cuò)誤通常是服務(wù)器禁止訪(fǎng)問(wèn)的錯(cuò)誤,可能是由于安全策略或權(quán)限問(wè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ò)誤的方法及代碼示例403錯(cuò)誤是指服務(wù)器禁止訪(fǎng)問(wèn)資源的請(qǐng)求,通常會(huì)導(dǎo)致出現(xiàn)這個(gè)錯(cuò)誤的原因是請(qǐng)求缺少權(quán)限或者被服務(wù)器拒絕。在進(jìn)行jQueryAJAX請(qǐng)求時(shí),有時(shí)候會(huì)遇到這種情況,本文將介紹如何解決這個(gè)問(wèn)題,并提供代碼示例。解決方法:檢查權(quán)限:首先要確保請(qǐng)求的URL地址是正確的,同時(shí)驗(yàn)證是否有足夠的權(quán)限來(lái)訪(fǎng)問(wèn)該資

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

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

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

Ajax(異步JavaScript和XML)允許在不重新加載頁(yè)面情況下添加動(dòng)態(tài)內(nèi)容。使用PHP和Ajax,您可以動(dòng)態(tài)加載產(chǎn)品列表:HTML創(chuàng)建一個(gè)帶有容器元素的頁(yè)面,Ajax請(qǐng)求加載數(shù)據(jù)后將數(shù)據(jù)添加到該元素中。JavaScript使用Ajax通過(guò)XMLHttpRequest向服務(wù)器發(fā)送請(qǐng)求,從服務(wù)器獲取JSON格式的產(chǎn)品數(shù)據(jù)。PHP使用MySQL從數(shù)據(jù)庫(kù)查詢(xún)產(chǎn)品數(shù)據(jù),并將其編碼為JSON格式。JavaScript解析JSON數(shù)據(jù),并將其顯示在頁(yè)面容器中。點(diǎn)擊按鈕觸發(fā)Ajax請(qǐng)求,加載產(chǎn)品列表。

如何使用Ajax從PHP方法中獲取變量? 如何使用Ajax從PHP方法中獲取變量? Mar 09, 2024 pm 05:36 PM

使用Ajax從PHP方法中獲取變量是Web開(kāi)發(fā)中常見(jiàn)的場(chǎng)景,通過(guò)Ajax可以實(shí)現(xiàn)頁(yè)面無(wú)需刷新即可動(dòng)態(tài)獲取數(shù)據(jù)。在本文中,將介紹如何使用Ajax從PHP方法中獲取變量,并提供具體的代碼示例。首先,我們需要編寫(xiě)一個(gè)PHP文件來(lái)處理Ajax請(qǐng)求,并返回所需的變量。下面是一個(gè)簡(jiǎn)單的PHP文件getData.php的示例代碼:

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

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

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

ajax不是一個(gè)具體的版本,而是一種使用多種技術(shù)的集合來(lái)異步加載和更新網(wǎng)頁(yè)內(nèi)容的技術(shù)。ajax沒(méi)有具體的版本號(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