php能用ajax,php教程

本文目錄一覽:

PHP 如何用ajax做文件上傳

通過傳統的form表單提交的方式上傳文件:

[html] view plain copy 在CODE上查看代碼片派生到我的代碼片form id= “uploadForm” action= “” method= “post” enctype =”multipart/form-data”

h1 測試通過Rest介面上傳文件 /h1

p 指定文件名: input type =”text” name=”filename” //p

p 上傳文件: input type =”file” name=”file” //p

p 關鍵字1: input type =”text” name=”keyword” //p

p 關鍵字2: input type =”text” name=”keyword” //p

p 關鍵字3: input type =”text” name=”keyword” //p

input type =”submit” value=”上傳”/

/form

不過傳統的form表單提交會導致頁面刷新,但是在有些情況下,我們不希望頁面被刷新,這種時候我們都是使用Ajax的方式進行請求的。

Ajax的方式進行請求:

[javascript] view plain copy 在CODE上查看代碼片派生到我的代碼片$.ajax({

url : “”,type : “POST”,

data : $( ‘#postForm’).serialize(),

success : function(data) {

$( ‘#serverResponse’).html(data);

},

error : function(data) {

$( ‘#serverResponse’).html(data.status + ” : ” + data.statusText + ” : ” + data.responseText);}

});

通常我們提交(使用submit button)時,會把form中的所有表格元素的name與value組成一個queryString,提交到後台。這用jQuery的方法來說,就是serialize。

通過$(‘#postForm’).serialize()可以對form表單進行序列化,從而將form表單中的所有參數傳遞到服務端。

但是上述方式,只能傳遞一般的參數,上傳文件的文件流是無法被序列化並傳遞的。

不過如今主流瀏覽器都開始支持一個叫做FormData的對象,有了這個FormData,我們就可以輕鬆地使用Ajax方式進行文件上傳了。

關於FormData及其用法

FormData是什麼呢?我們來看看Mozilla上的介紹。

XMLHttpRequest Level 2添加了一個新的介面FormData.利用FormData對象,我們可以通過JavaScript用一些鍵值對來模擬一系列表單控制項,我們還可以使用XMLHttpRequest的send()方法來非同步的提交這個”表單”.比起普通的ajax,使用FormData的最大優點就是我們可以非同步上傳一個二進位文件.

所有主流瀏覽器的較新版本都已經支持這個對象了,比如Chrome 7+、Firefox 4+、IE 10+、Opera 12+、Safari 5+。

參見:

FormData()

想得到一個FormData對象:

var formdata = new FormData();

W3c草案提供了三種方案來獲取或修改FormData。

方案1:創建一個空的FormData對象,然後再用append方法逐個添加鍵值對:

var formdata = new FormData();

formdata.append(“name”, “呵呵”);

formdata.append(“url”, “”);方案2:取得form元素對象,將它作為參數傳入FormData對象中!

var formobj = document.getElementById(“form”);var formdata = new FormData(formobj);

方案3:利用form元素對象的getFormData方法生成它!

var formobj = document.getElementById(“form”);var formdata = formobj.getFormData()

Method

FormData.append

本方法用於向已存在的鍵添加新的值,如該鍵不存在,新建之。

語法

formData.append(name, value);

formData.append(name, value, filename);

注: 通過 FormData.append()方法賦給欄位的值若是數字會被自動轉換為字元(欄位的值可以是一個Blob對象,一個File對象,或者一個字元串,剩下其他類型的值都會被自動轉換成字元串).

參數解釋

name

鍵 (key), 對應表單域

value

表單域的值

filename (optional)

The filename reported to the server (a USVString), when a Blob or File is passed as the second parameter. The default filename for Blob objects is “blob”.

FormData.delete

將一對鍵和值從 FormData 對象中刪除。

formData.delete(username);

FormData.get

返回給定鍵的第一個值

formData.append(‘username’, ‘Justin’);

formData.append(‘username’, ‘Chris’);

formData.get(username); // “Justin”

FormData.getAll

返回給定鍵的所有值

formData.append(‘username’, ‘Justin’);

formData.append(‘username’, ‘Chris’);

formData.getAll(username); // [“Justin”, “Chris”]

FormData.has

檢查是否包含給定鍵,返回 true 或 false

formData.has(username);

FormData.set

設置給定鍵的值

formData.set(name, value);

formData.set(name, value, filename);

瀏覽器兼容情況

來自 MDN:

Desktop

FeatureChromeFirfox(Gecko)Intenet ExplorerOperaSafariBasic support7+4.0(2.0)10+12+5+

append with filename(Yes)22.0(22.0)???

delete, get, getAll, has, setBehind FlagNot supportedNot supported(Yes)Not supportedMobile

FeatureAndroidChrome AndroidFirfox Mobile (Gecko)Firfox OS (Gecko)IE MobileOpera MobileSafari MobileBasic support3.0?4.0(2.0)1.0.1?12+?

append with filename??22.0(22.0)1.2???

delete, get, getAll, has, set(Yes)(Yes)Not supportedNot supportedNot supported(Yes)Not supported2015年06月04日發布

Ajax通過FormData上傳文件

1.使用form表單初始化FormData對象方式上傳文件HTML代碼

form id=”uploadForm” enctype=”multipart/form-data”

input id=”file” type=”file” name=”file”/

button id=”upload” type=”button”upload/button

/form

javascript代碼

$.ajax({

url: ‘/upload’,

type: ‘POST’,

cache: false,

data: new FormData($(‘#uploadForm’)[0]),

processData: false,

contentType: false

}).done(function(res) {

}).fail(function(res) {});

這裡要注意幾點:

processData設置為false。因為data值是FormData對象,不需要對數據做處理。

form標籤添加enctype=”multipart/form-data”屬性。

cache設置為false,上傳文件不需要緩存。

contentType設置為false,不設置contentType值,因為是由form表單構造的FormData對象,且已經聲明了屬性enctype=”multipart/form-data”,所以這裡設置為false。

上傳後,伺服器端代碼需要使用從查詢參數名為file獲取文件輸入流對象,因為input中聲明的是name=”file”。

如果不是用form表單構造FormData對象又該怎麼做呢?

2.使用FormData對象添加欄位方式上傳文件

HTML代碼

div id=”uploadForm”

input id=”file” type=”file”/

button id=”upload” type=”button”upload/button

/div

這裡沒有form標籤,也沒有enctype=”multipart/form-data”屬性。

javascript代碼

var formData = new FormData();

formData.append(‘file’, $(‘#file’)[0].files[0]);$.ajax({

url: ‘/upload’,

type: ‘POST’,

cache: false,

data: formData,

processData: false,

contentType: false

}).done(function(res) {

}).fail(function(res) {});

這裡有幾處不一樣:

append()的第二個參數應是文件對象,即$(‘#file’)[0].files[0]。

contentType也要設置為『false』。

從代碼$(‘#file’)[0].files[0]中可以看到一個input type=”file”標籤能夠上傳多個文件,只需要在input type=”file”里添加multiple或multiple=”multiple”屬性。

3.伺服器端讀文件

從Servlet 3.0 開始,可以通過 request.getPart() 或 request.getPars() 兩個介面獲取上傳的文件。

thinkphp中怎麼用ajax?

第一.tp中ajax的url需要使用大U方法.比如:$.post(“{:U(‘User/add’)}”)

第二.控制器中返回結果得第一種方法.$this-error(‘失敗’,”,true); 第三個參數為true.則發揮的是json數據.包含info.status.url三項.

第三.控制器中返回結果的第二種方法.$this-ajaxReturn(array(‘customKey1’=’customValue1′,’customKey2’=’customValue2′,’customKey3’=’customValue3’)).

簡介:

國內翻譯常為「阿賈克斯」和阿賈克斯足球隊同音。Web應用的交互如Flickr,Backpack和Google在這方面已經有質的飛躍。這個術語源自描述從基於Web的應用到基於數據的應用的轉換。在基於數據的應用中,用戶需求的數據如聯繫人列表,可以從獨立於實際網頁的服務端取得並且可以被動態地寫入網頁中,給緩慢的Web應用體驗著色使之像桌面應用一樣。

開發模式:

許多重要的技術和AJAX開發模式可以從現有的知識中獲取。例如,在一個發送請求到服務端的應用中,必須包含請求順序、優先順序、超時響應、錯誤處理及回調,其中許多元素已經在Web服務中包含了,就像現在的SOA。AJAX開發人員擁有一個完整的系統架構知識。同時,隨著技術的成熟還會有許多地方需要改進,特別是UI部分的易用性。

AJAX開發與傳統的CS開發有很大的不同。這些不同引入了新的編程問題,最大的問題在於易用性。由於AJAX依賴瀏覽器的JavaScript和XML,瀏覽器的兼容性和支持的標準也變得和JavaScript的運行時性能一樣重要了。這些問題中的大部分來源於瀏覽器、伺服器和技術的組合,因此必須理解如何才能最好的使用這些技術。

綜合各種變化的技術和強耦合的客戶服務端環境,AJAX提出了一種新的開發方式。AJAX開發人員必須理解傳統的MVC架構,這限制了應用層次之間的邊界。同時,開發人員還需要考慮CS環境的外部和使用AJAX技術來重定型MVC邊界。最重要的是,AJAX開發人員必須禁止以頁面集合的方式來考慮Web應用而需要將其認為是單個頁面。一旦UI設計與服務架構之間的範圍被嚴格區分開來後,開發人員就需要更新和變化的技術集合了。

如何在同一個PHP頁面,通過ajax把值傳給PHP變數?

舉個例子:你想在用戶點擊時,把 apple 這個字元串,通過前端傳給後端。

前端,用 jQuery 舉例:

$(‘button’).click(function () {

$.ajax({

url: ‘/xxx’,

method: ‘post’,

dataType: ‘json’,

data: {fruit: ‘apple’}

}).done(function (res) {

// 成功後的回調

}).fail(function (err) {

// 失敗後的回調

});

});

後端 PHP 處理:

$fruit = $_POST[‘fruit’]; // 獲取從 ajax 傳過來的 fruit 的值,這裡是 apple。

如果你想在前端重新顯示這個字元串 apple,那麼你要用 PHP 把數據返回給頁面,然後在上面 「// 成功後的回調」 裡面,補充邏輯代碼。

例如 PHP 把 apple 返回給前端:

return json_encode(array(‘fruit’ = ‘apple’));

前端回調處理:

// 成功後的回調

alert(res.fruit); // 彈框顯示 「apple」

實際上,$_POST 能夠獲取所有從前端用 post 方式提交過來的數據,不管你是頁面刷新方式,還是 ajax(jQuery 才叫 ajax,實際上它是 XMLHttpRequest,非同步非阻塞的請求方式)

求解php怎麼用ajax 查了半天還是不太懂 求老個寫個簡單例子

php有內部函數可以直接完成ajax的功能,比如:

?php

$f=file_get_contents(“網址寫在這裡”);

echo $f;

?

還可以用curl

原創文章,作者:QIWC,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/141557.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
QIWC的頭像QIWC
上一篇 2024-10-08 17:42
下一篇 2024-10-08 17:42

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • MQTT使用教程

    MQTT是一種輕量級的消息傳輸協議,適用於物聯網領域中的設備與雲端、設備與設備之間的數據傳輸。本文將介紹使用MQTT實現設備與雲端數據傳輸的方法和注意事項。 一、準備工作 在使用M…

    編程 2025-04-29
  • Python3.6.5下載安裝教程

    Python是一種面向對象、解釋型計算機程序語言。它是一門動態語言,因為它不會對程序員提前聲明變數類型,而是在變數第一次賦值時自動識別該變數的類型。 Python3.6.5是Pyt…

    編程 2025-04-29
  • Deepin系統分區設置教程

    本教程將會詳細介紹Deepin系統如何進行分區設置,分享多種方式讓您了解如何規劃您的硬碟。 一、分區的基本知識 在進行Deepin系統分區設置之前,我們需要了解一些基本分區概念。 …

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Qt雷達探測教程

    本文主要介紹如何使用Qt開發雷達探測程序,並展示一個簡單的雷達探測示例。 一、環境準備 在開始本教程之前,需要確保你的開發環境已經安裝Qt和Qt Creator。如果沒有安裝,可以…

    編程 2025-04-29
  • 猿編程python免費全套教程400集

    想要學習Python編程嗎?猿編程python免費全套教程400集是一個不錯的選擇!下面我們來詳細了解一下這個教程。 一、課程內容 猿編程python免費全套教程400集包含了從P…

    編程 2025-04-29
  • Python煙花教程

    Python煙花代碼在近年來越來越受到人們的歡迎,因為它可以讓我們在終端里玩煙花,不僅具有視覺美感,還可以通過代碼實現動畫和音效。本教程將詳細介紹Python煙花代碼的實現原理和模…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 使用Snare服務收集日誌:完整教程

    本教程將介紹如何使用Snare服務收集Windows伺服器上的日誌,並將其發送到遠程伺服器進行集中管理。 一、安裝和配置Snare 1、下載Snare安裝程序並安裝。 https:…

    編程 2025-04-29

發表回復

登錄後才能評論