


下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、php 采用 ajax 數(shù)據(jù)提交post 與 post 常見方法總結(jié)在很多情況下我們使用 ajax 是不會有什么問題的, 但有時會碰到 ajax 數(shù)據(jù)提交 post 不完整的問題,以下是為大家搜索的 php 采用 ajax 數(shù)據(jù)提交 post 與 post 常見方法總結(jié),希望能給大家?guī)韼椭?! 更多精彩內(nèi)容請及時關(guān)注我們 !下邊是一個標(biāo)準(zhǔn)的ajax 請求代碼,正常情況下是不會有任何問題的,但是,在特定情況下就會出現(xiàn)問題, 比如,username=fdas&321的時候,或者參數(shù)值中出現(xiàn)了&符號,經(jīng)過了N多遍測試,發(fā)現(xiàn)數(shù)據(jù)都傳輸了,但是打印出來數(shù)據(jù)是半截, 最后仔細(xì)觀察頭信息發(fā)
2、現(xiàn)傳輸?shù)念^不對,問題定位到了js 上,發(fā)現(xiàn)字符串拼接的方式會造成這種問題 username=fdas&321&password=password這樣就是錯誤了的。 所以我們需要把傳輸?shù)臄?shù)據(jù)變成username:username,passsword:password這種 json 格式即可避免問題 !示例代碼如下:$(".submit").bind('click',function()varusername=$("inputname='username'").val();$.ajax(url:"po
3、st",type:"post",dataType:"json",data:"username="+username+"&password="+password,timeout:5000,error:function()alert(1),suess:function()補(bǔ)充:四種常見的POST提交數(shù)據(jù)方式 application/x-form-urlencoded這應(yīng)該是最常見的POST提交數(shù)據(jù)的方式了。瀏覽器的原生 form表單,如果不設(shè)置enctype 屬性,那么最終就會以application
4、/x-form-urlencoded方式提交數(shù)據(jù)。請求類似于下面這樣 ( 無關(guān)的請求頭在本文中都省略掉了) :POST.jb51./1.1Content-Type:application/x-form-urlencoded;charset=utf-8title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3首先, Content-Type 被指定為application/x-form-urlencoded;其次,提交的數(shù)據(jù)按照key1=val1&key2=val2 的方式進(jìn)行編碼, key 和 val 都進(jìn)行了 URL轉(zhuǎn)碼。大部
5、分服務(wù)端語言都對這種方式有很好的支持。例如PHP中,$_POST'title'可以獲取到 title的值, $_POST'sub' 可以得到sub 數(shù)組。很多時候,我們用Ajax 提交數(shù)據(jù)時,也是使用這種方式。例如JQuery 和 QWrap的 Ajax ,Content-Type 默認(rèn)值都是application/x-form-urlencoded;charset=utf-8。 multipart/form-data這又是一個常見的POST數(shù)據(jù)提交的方式。我們使用表單上傳文件時,必須讓 form 的 enctyped 等于這個值。直接來看一個請求示例:POST
6、.jb51./1.1Content-Type:multipart/form-data;boundary=-WebKitFormBoundaryrGKCBY7qhFd3TrwA-WebKitFormBoundaryrGKCBY7qhFd3TrwAContent-Disposition:form-data;name="text"title-WebKitFormBoundaryrGKCBY7qhFd3TrwAContent-Disposition:form-data;name="file"filename="chrome.png"Conte
7、nt-Type:image/pngPNG.contentofchrome.png.-WebKitFormBoundaryrGKCBY7qhFd3TrwA-這個例子稍微復(fù)雜點(diǎn)。 首先生成了一個boundary 用于分割不同的字段,為了避免與正文內(nèi)容重復(fù),boundary 很長很復(fù)雜。然后Content-Type 里指明了數(shù)據(jù)是以mutipart/form-data來編碼,本次請求的 boundary 是什么內(nèi)容。消息主體里按照字段個數(shù)又分為多個結(jié)構(gòu)類似的部分,每部分都是以-boundary開始,緊接著內(nèi)容描述信息,然后是回車,最后是字段具體內(nèi)容( 文本或二進(jìn)制 ) 。如果傳輸?shù)氖俏募?,還要包含文
8、件名和文件類型信息。消息主體最后以-boundary-標(biāo)示結(jié)束。關(guān)于mutipart/form-data的詳細(xì)定義,請前往 rfc1867 查看。這種方式一般用來上傳文件,各大服務(wù)端語言對它也有著良好的支持。上面提到的這兩種POST數(shù)據(jù)的方式,都是瀏覽器原生支持的,而且現(xiàn)階段原生form 表單也只支持這兩種方式。但是隨著越來越多的 Web站點(diǎn),尤其是 WebApp,全部使用 Ajax 進(jìn)行數(shù)據(jù)交互之后,我們完全可以定義新的數(shù)據(jù)提交方式,給開發(fā)帶來更多便利。 application/jsonapplication/json這個 Content-Type 作為響應(yīng)頭大家肯定不陌生。實(shí)際上, 現(xiàn)在越
9、來越多的人把它作為請求頭,用來告訴服務(wù)端消息主體是序列化后的JSON字符串。由于 JSON規(guī)范的流行, 除了低版本 IE 之外的各大瀏覽器都原生支持JSON.stringify,服務(wù)端語言也都有處理 JSON的函數(shù),使用 JSON不會遇上什么麻煩。JSON格式支持比鍵值對復(fù)雜得多的結(jié)構(gòu)化數(shù)據(jù),這一點(diǎn)也很有用。記得我?guī)啄昵白鲆粋€項(xiàng)目時,需要提交的數(shù)據(jù)層次非常深,我就是把數(shù)據(jù) JSON序列化之后來提交的。 不過當(dāng)時我是把JSON字符串作為 val ,仍然放在鍵值對里,以 x-form-urlencoded 方式提交。Google的 AngularJS 中的 Ajax 功能,默認(rèn)就是提交JSON字符
10、串。例如下面這段代碼:vardata='title':'test','sub':1,2,3;$.post(url,data).suess(function(result).);最終發(fā)送的請求是:POST.jb51./1.1Content-Type:application/json;charset=utf-8"title":"test","sub":1,2,3這種方案,可以方便的提交復(fù)雜的結(jié)構(gòu)化數(shù)據(jù),特別適合RESTful 的接口。各大抓包工具如Chrome自帶的開發(fā)者工具、Firebug
11、 、Fiddler ,都會以樹形結(jié)構(gòu)展示JSON數(shù)據(jù),非常友好。但也有些服務(wù)端語言還沒有支持這種方式,例如php 就無法通過 $_POST對象從上面的請求中獲得內(nèi)容。這時候,需要自己動手處理下:在請求頭中Content-Type 為 application/json時,從 php:/input里獲得原始輸入流,再 json_decode 成對象。一些php 框架已經(jīng)開始這么做了。當(dāng)然 AngularJS 也可以配置為使用 x-form-urlencoded方式提交數(shù)據(jù)。 text/xml之前提到過 XML-RPC(XMLRemoteProcedureCall)。它是一種使用作為傳輸協(xié)議, XML作為編碼方式的遠(yuǎn)程調(diào)用規(guī)范。 典型的 XML-RPC請求是這樣的:POST.jb51./1.1Content-Type:text/xmlexamples.getStateName41XML-RPC協(xié)議簡單、功能夠用,各種語言的實(shí)現(xiàn)都有。它的使用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設(shè)計(jì)平臺外包合同協(xié)議
- 超大陽臺賣房合同協(xié)議
- 財務(wù)監(jiān)管協(xié)議書范本
- 購買亞克力板合同協(xié)議
- 訂單種植紅蘿卜合同協(xié)議
- 購買生豬養(yǎng)殖合同協(xié)議
- 訂貨賠償合同協(xié)議模板
- 資質(zhì)服務(wù)合同協(xié)議書范本
- 2025年跨文化交際能力測試卷及答案
- 2025年經(jīng)濟(jì)學(xué)原理課程考試試卷及答案詳解
- 呼吸道合胞病毒知識科普
- 峨眉山月歌-李白
- 高速公路收費(fèi)員培訓(xùn)模板案例(個人經(jīng)驗(yàn)總結(jié)分析)
- 跨文化交際智慧樹知到課后章節(jié)答案2023年下齊魯工業(yè)大學(xué)
- (完整版)中國書法英文版
- 宏觀經(jīng)濟(jì)學(xué)期末考試試題(含答案)
- 構(gòu)建規(guī)、建、管、運(yùn)一體化的明珠灣智慧城市信息平臺
- 電梯井操作平臺
- 臨床免疫學(xué)檢驗(yàn)技術(shù)第26章 腫瘤免疫及其免疫檢測
- 第三人稱單數(shù)專項(xiàng)練習(xí)(動詞)
- 膳管會會議記錄
評論
0/150
提交評論