ajxs跨域 php_PHP項目中是如何處理Ajax請求與Ajax跨域的

PHP項目中是如何處理Ajax請求與Ajax跨域的

發布時間:2020-12-14 16:35:47

來源:億速云

閱讀:98

這期內容當中小編將會給大家帶來有關PHP項目中是如何處理Ajax請求與Ajax跨域的,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

PHP判斷是否為Ajax請求

我們知道,在發送ajax請求的時候,可以通過XMLHttpRequest這個對象,創建自定義的header頭信息, 在jquery框架中,對于通過它的$.ajax, $.get, 或者$.post方法請求網頁內容時,它會向服務器傳遞一個HTTP_X_REQUESTED_WITH的參數,php中就是在header一層判斷是否是ajax請求,對應的根據$_SERVER['HTTP_X_REQUESTED_WITH']判斷。一般情況下$_SERVER['HTTP_X_REQUESTED_WITH']默認是XMLHttpRequest,$_SERVER['HTTP_X_REQUESTED_WITH']也可以自定義創建的,使用XMLHttpRequest.setRequestHeader(name,value)。

示例:前端頁面發送普通的ajax請求給后端test.php。$.ajax({

type:?"GET",

url:?'test.php',

success:?function(data)?{

console.log(data);

}

});

服務端test.php可以判斷該請求是不是Ajax異步請求,然后根據業務需求做出響應的回應。

以下是服務端test.php的簡單驗證是否為ajax請求的代碼:function?isAjax()?{

return?@$_SERVER['HTTP_X_REQUESTED_WITH']?==?'XMLHttpRequest'???true?:?false;

}

if?(isAjax())?{

echo?'Ajax?Request?Success.';

}?else?{

echo?'No.';

}

Ajax發起JSONP跨域請求

我們通過jQuery的JSONP方式可以實現跨域ajax請求,服務端php也需要做出相應的處理,也就是說php這邊必須和前端頁面按照一定的格式請求和返回數據。

示例:前端頁面發起JSONP請求:$.ajax({

type:?"get",

data:?"random="+Math.random(),

url:?"http://demo.jb51.net/phpajax/jsonp.php",

dataType:?"jsonp",

jsonp:?"callback",

success:?function(data)?{

console.log(data);

},

error:?function()?{

console.log('Request?Error.');

}

});

我們會發現,ajax請求參數中有 dataType: "jsonp" 和 jsonp: "callback" ,這個就表明了我要請求的是jsonp,并且會有回調callback返回。當然,我們也可以自定義回調函數,如 jsonpCallback:"success_jsonpCallback"

還可以簡單的寫成:jQuery.getJSON('http://demo.jb51.net/phpajax/jsonp.php?callback=?",{

random:?Math.random()

},?function(data){

console.log(data);

});

php后端服務代碼可以這樣寫(注意輸出返回的格式):$data?=?array(

'rand'?=>?$_GET['random'],

'msg'?=>?'Success'

);

echo?$_GET['callback'].'('.json_encode($data).')';

Ajax跨域請求:CORS

CORS,又稱跨域資源共享,英文全稱Cross-Origin Resource Sharing。假設我們想使用Ajax從a.com的頁面上向b.com的頁面上要點數據,通常情況由于同源策略,這種請求是不允許的,瀏覽器也會返回“源不匹配”的錯誤,所以就有了“跨域”這個說法。但是我們也有解決辦法,我們可以再b.com的頁面header信息中增加一行代碼:header("Access-Control-Allow-Origin:?*");

當我們設置的header為以上信息時,任意一個請求過來之后服務端我們都可以進行處理和響應,那么在調試工具中可以看到其頭信息設置,其中見紅框中有一項信息是“*Access-Control-Allow-Origin:* ”,表示我們已經啟用CORS,如果要限制只允許某個域名的請求,可以這樣:header("Access-Control-Allow-Origin:?https://www.jb51.net");

示例:通過CORS跨域請求數據$.ajax({

type:?"get",

data:?"random="+Math.random(),

url:?"http://demo.jb51.net/phpajax/ajax.php",

dataType:?"json",

success:?function(data)?{

console.log(data);

$("#result_3").html(data.msg+':'+data.rand);

},

error:?function()?{

$("#result_3").html('Request?Error.');

}

});

我們在另一個網站域名下的ajax.php加上這樣的代碼:header("Access-Control-Allow-Origin:?https://www.jb51.net");

$data?=?array(

'rand'?=>?$_GET['random'],

'msg'?=>?'Success'

);

echo?json_encode($data);

上述就是小編為大家分享的PHP項目中是如何處理Ajax請求與Ajax跨域的了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/270846.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/270846.shtml
英文地址,請注明出處:http://en.pswp.cn/news/270846.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據制作

1.數據準備,我們需要一個train和valid文件夾,一個train.txt和val.txt(圖片文件夾的位置可以任意,但是這兩個txt文件的位置在data/fingervein/目錄下) train和valid文件夾自然就存放著待訓練的圖片,train.tx…

SQLServer數據庫文件組相關知識筆記

1、數據庫文件組概念數據庫文件被組織在稱為“文件組”的邏輯組中。文件組是所創建對象(如表或索引)的目標容器,對象數據將分散在其所在目標文件組的文件中,文件組可以按你要求的方式來控制對象的物理位置。每個數據庫有一個主文件…

html文件上傳限制類型,html input file accept 上傳文件類型限制格式 MIME 類型列表

單點登錄改進版-使用ajax分發cookie避免重定向輪詢前言 繼上一篇博文:可跨域的單點登錄(SSO)實現方案[附.net代碼]雖然實現了單點登錄,也存在很多不合理的地方.很多熱心的朋友也給出了很多指導性的意見,特別是 LoveCoder提出的意見. 在很 ...Hello Java用記事本或者Eclipse編寫…

jvm配置參數,查看大對象直接分配到老年代

看下如下代碼: 配置參數 -Xms60m -Xms60m -XX:NewRatio2 -XX:SurvivorRatio8 -XX:PrintGCDetails 運行后看下如下,可以看到ParOldGen老年代,為used 20480K,也就20M,說明大對象直接分配到老年代 總結:

win10引導安卓x86_GPDwin安裝安卓x86折騰記

接著之前的http://www.gcfan.cn/archives/3685說。王者榮耀下載下來問題依舊,我就在網上搜索答案。這里必須要感謝一下豆友“放不下的是筷子”,我搜索解決方案的時候發現了他的帖子,就跟帖問了他一下,結果他回復了我不少問題&…

DB Stack Overflow

Whats wrong with nullable columns in composite primary keys? 轉載于:https://www.cnblogs.com/drizzlewithwind/p/5853091.html

電腦組裝筆記:手把手教你如何自己組裝電腦

目錄 第一步:安裝CPU 第二步:安裝內存條 第三步:CPU風扇安裝 第四步:電源安裝 第五步:主板裝入機箱 第六步:硬盤、固態硬盤、光驅的安裝 第七步:線路連接 第八步:顯示器的連接 第九步…

Amoeba for MySQL

Amoeba for MySQL Amoeba for MySQL致力于MySQL的分布式數據庫前端代理層,它主要在應用層訪問MySQL的時候充當query 路由功能,專注 分布式數據庫 proxy 開發。座落與Client、DB Server(s)之間。對客戶端透明。具有負載均衡、高可用性、Query過濾、讀寫分…

jquery 過濾html代碼,jquery – 如何使指令使用過濾的HTML屬性?

您可以使用ng-attr,這將是更方便的解決方案. ng-attr-data-title將評估插值{{}}&使用值創建data-title屬性.而不是使用data-title “{{‘我的字符串’| myfilter}}”使用ng-attr-data-title “{{‘我的字符串’| myfilter}}”標記...更新因為你得到的價值就像{{‘我的字符串…

SQLServer數據庫文件相關知識筆記

1、數據庫文件概念數據庫文件是SQLServer數據庫的物理體現,和計算機的普通文件一樣存儲在計算機的磁盤空間當中。作為數據庫記錄和日志等其他信息的存儲載體。2、數據庫文件分類數據庫文件主要包括主數據庫文件、次要數據庫文件、日志文件。主數據庫文件&#xff1a…

電商總結(七)緩存系統

前段時間,在和朋友討論和研究緩存的使用,一直對緩存的使用搞的不太清楚,所以這次把和朋友討論過緩存系統的設計的相關問題總結總結。 對于一個電商系統,緩存是重要組成部分,提升系統性能的主要方式之一就是緩存。它可以…

操作系統:Win10自帶的8個基本功能非常實用

有些朋友總是喜歡安裝很多第三方軟件,但是卻沒有意識到win10自帶的基本功能,比這些第三方軟件更加好用。今天小編給大家介紹一下Win10自帶的八個功能,希望對大家能有所幫助! 一、保護眼睛:深色主題 辦公室職場人士&…

瘋狂游戲型計算機配置清單,電腦配置清單

想自己組裝電腦卻不知如何配置?下面是出國留學網實用資料欄目精心整理的組裝電腦配置清單,歡迎參考!【組裝電腦配置清單】電腦硬件,包括電腦中所有物理的零件,以此來區分它所包括或執行的數據和為硬件提供指令以完成任務的軟件。 …

在Android App中集成Google登錄

技術文章 來源:碼農網 發布:2016-09-19 瀏覽:194 摘要:今天,幾乎所有的web和移動app都自帶谷歌和Facebook登錄,這對app開發者和用戶來說是一個非常有用的功能,因為幾乎每個人都有一個谷歌/ Gmai…

python程序寫完后點哪個運行快_讓你的Python運行更快

討厭Python的人總是說,他們不想使用它的原因之一是它很 慢。嗯,特定程序(無論使用何種編程語言)是快還是慢,在很大程度上取決于編寫該程序的開發人員以及編寫優化而 快速的 程序的技能和能力 。因此,讓我們證明一些人是錯誤的&…

C語言理論作業—2

1.C語言基本數據類型及其占用的內存空間大小分別是:int:4字節,short[int]:2字節,long[int]:4字節,unsigned[int]:4字節,unsigned short[int]:2字節,unsigned long[int]:4字節,char:1字節&#x…

html 科幻模板,html5酷炫宇宙科幻周年慶典專題動畫模板

資源下載此資源下載價格為4D幣,請先登錄資源文件列表codedown123-0727-39/img/arrow-down-1.png , 1229codedown123-0727-39/img/arrow-down-2.png , 1190codedown123-0727-39/img/arrow-down-3.png , 1132codedown123-0727-39/img/asteroids-left.png , 7015codedo…