目錄
2.PHP与AJAX
3.JSON格式
4.jQuery中的AJAX
首頁 後端開發 php教程 PHP與AJAX實例詳解

PHP與AJAX實例詳解

Feb 22, 2018 pm 01:54 PM
ajax php 實例

本文我們將和大家分享AJAX基礎、PHP與AJAX、JSON格式、jQuery中的AJAX,希望這篇文章能幫助大家。

1.AJAX基礎

(1)AJAX(Asynchronous JavaScript and XML):異步的javascript和xml的縮寫。

(2)AJAX不是某種程式語言,而是一種在無需載入整個頁面的情況下能夠更新部分網頁的技術。

(3)傳統網頁的缺點:需要更新內容或提交一個表單,需要重新載入整個頁面;使用AJAX優點:透過在後台跟伺服器進行少量的資料交換,網頁就可以實現非同步局部更新。對於填寫複雜表單來說,有非常好的使用者體驗。

(4)AJAX同步與非同步:同步說白了就是載入整個頁面;非同步能夠載入部分頁面。具體的話,客戶端與伺服器端的聯繫。 Ajax技術出現之前,都是同步的交換數據,如果填寫的比較複雜的表單將會非常麻煩。有了XMLHttpRequest物件後,同步世界變成了非同步世界。透過XMLHttpRequest這個物件後台可以和伺服器進行資料交換。

(5)XMLHttpRequest物件建立:var requerst=new XMLHttpRequest();直接實例化物件即可!注意:IE5和IE6不支援此定義,如果要實作瀏覽器頁面相容,如下程式碼所示:

var request;
if(window.XMLHttpRequest){
    request  = new XMLHttpRequest();  // IE7+,Firefox,Chrome,Opera,Safari...
}else{
    request = new ActiveObject("Microsoft.XMLHTTP"); // IE6,IE5
}
登入後複製

(6)HTTP請求:http是一種無狀態的協定:說白了就是不能建立持久連線且無記憶的協定。進一步:透過頁面請求和回應的過程,實現網頁的調試。

(6.1)一個完整的HTTP請求過程,通常有下列7個步驟:

  • 建立TCP連線

  • ##網頁瀏覽器向網頁伺服器傳送請求指令

  • 網頁瀏覽器傳送請求頭資訊

  • Web伺服器回應

  • #Web伺服器發送應答頭資訊

  • Web伺服器向瀏覽器傳送資料

  • Web伺服器關閉TCP連線

(6.2)http請求一般由四個部分組成:

  • #HTTP請求的方法或動作,例如GET還是POST請求

  • 正在請求的URL,總得知道請求的地址是什麼吧

  • 請求頭,包含一些客戶端的環境信息,身份驗證信息等

  • 請求體,也就是請求正文,請求正文中可以包含客戶提交的查詢支付穿信息,表單信息等等

(6.3 )GET與POST[收集來自method="post/get"的表單中的name值]

#說白了,都是收集從表單裡面傳過來的值。傳過去的值,一種以url的形式顯示(不安全),一種以值的形式顯示(安全);GET一般用於訊息的獲取,使用

url傳遞參數,限制在2000個字符,對所有人可見,不安全。 POST一般用於從表單傳送資料,參數在http請求體中,不限制訊息傳送數量。

(6.4)Http回應一般由三個部分組成:

  • #由一個數字和文字組成的狀態碼,用來顯示請求是成功還是失敗;

  • 回應頭,包含伺服器類型,日期時間,內容類型和長度等;

  • ##回應體,也就是回應內文。
  • (6.5)Http狀態碼由三位數字組成,其中首位數字定義了狀態碼的類型:

    1XX:資訊類,表示收到web瀏覽器請求,正在進一步的處理中;
  • 2XX:成功,表示使用者請求被正確接收、理解和處理,例如:200 OK
  • 3XX:重定向,表示請求沒有成功,客戶必須採取進一步的動作
  • #4XX:客戶端錯誤,表示客戶端提交的請求有錯誤,如404 NOT FOUND,意味著請求中引用的文檔不存在。
  • 5XX:伺服器錯誤,表示伺服器不能完成對請求的處理。
  • (7)XMLHttpRequest發送請求:(物件的方法)

    open(method請求方法,url請求位址,async請求同步或者非同步(非同步是true,同步是false,其實預設就是true));///
  • 呼叫

    非同步請求

  • send(string);(使用get方法時,參數可以不填寫或null,因為資訊都包含在網址列url中;使用post則一定要填入);//把請求
  • 傳送

    到伺服器

  • 舉個栗子:
request.open("POST","create.php",true);
request.setRequestHeader("Content-type","application/x-www-form-urlencoded");//设置http的头信息,告诉web服务器要发送一个表单;注意:setRequest请求一定要放在open和send之间,否则会抛出异常
request.send("name=王大锤&sex=男");
登入後複製

(8)XMLHttpRequest取得回應:(物件的方法與屬性)

  • responseText

    #:簡單來說:就是接收伺服器回應回送的資料。獲得字串形式的相應資料。

  • responsXML:取得XML形式的對應資料。現在一般轉換為JSON形式的資料。
  • status和statusText:以數字和文字形式傳回http狀態碼。
  • getAllResponseHeader():取得所有的回應標頭。
  • getResponseHeader():查詢回應中的某個欄位的值。
  • readyState屬性:回應回傳成功的時候得到通知。
  • 0:请求未初始化,open还没有调用。

  • 1:服务器连接已建立,open已经调用了。

  • 2:请求已经接收,也就是接收到头信息了。

  • 3:请求处理中,也就是接收到响应主体了。

  • 4:请求已完成,且响应已就绪,也就是响应完成了。

举个栗子:涵盖了ajax的大部分内容(典型的xhr建立ajax的过程)

var request = new XMLHttpRequest();//创建XHR对象
request.open("GET","get.php",true);//调用异步请求
request.send();//发送异步请求
//对事件进行监听,判断服务器是否正确得做出了响应
request.onreadystatechange = function(){
  if(request.readyState===4 && request.status === 200){
    request.reponseText;//接收服务器响应回送的数据
   }
}
登入後複製

2.PHP与AJAX

实战:[服务器端与客户端]实现查询员工和新建员工的后台接口

(1)客户端部分代码:

//新建员工客户端代码
document.getElementById("save").onclick=function(){
    var request=new XMLHttpRequest();//创建XHR对象
    request.open("POST","action.php");//调用异步请求
    //data拼接的URL
    //document.getElementById("staffName").value获取表单中用户写入的值
    var data = "username=" + document.getElementById("staffName").value 
                  + "&num=" + document.getElementById("staffNumber").value 
                  + "&workname=" + document.getElementById("staffJob").value;
    request.setRequestHeader("Content-type","application/x-www-form-urlencoded");//设置http的头信息
    request.send(data);//发送异步请求
    //对事件进行监听,判断服务器是否能正确做出响应
    request.onreadystatechange=function(){
        if(request.readyState===4){
            if(request.status===200){
                //innerHTML不仅可以读取元素内容,还可以将内容写入元素
                //ajax引擎对象通过responseText属性或者responseXML属性接收服务器回送的数据,然后在静态页面中对其进行处理,使页面达到局部刷新的效果
                document.getElementById("createResult").innerHTML=request.responseText;
            }else{
                alter("发生错误:"+request.status);
            }
        }
    }
}
登入後複製

(2)服务器端部分代码:

//查询员工服务器端代码
<?php 
header(&#39;Content-type:text/html;charset=utf8&#39;);
$con=mysqli_connect("127.0.0.1","","");
mysqli_select_db($con,"function");
$sql="SELECT * FROM `ajax`";
$query=mysqli_query($con,$sql);
//数据库数据的总条数$number
$number=mysqli_num_rows($query);
for($i=0;$i<$number;$i++){
    //将每条数据转换成关联数组打印出来
    $arr=mysqli_fetch_row($query);
    //print_r($arr);
    //echo $arr[2];die;
    if($_GET[&#39;num&#39;]==$arr[2]){
        echo "找到员工:编号$arr[2],姓名:$arr[1],职位:$arr[3]";
        break;
    }
}
 ?>
登入後複製

3.JSON格式

(1)json:javascript对象表示法。

(2)json是存储和交换文本信息的语法,类似xml。采用键值对的方式组织,易于人们阅读与机器解析。

(3)json是独立于语言的,不管什么语言都可以解析json,只要按json的规则来就行。

(4)json的长度比xml小;json读写的速度更快;json可以使用js内建方法直接解析,转化成js对象,非常方便。

(5)json语法规则:json数据的书写格式是:名称/值对

名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开,比如"name":"王大锤"注意:json与javaScript对象表示法不同,javaScript对象表示法的键值不需要用引号,但是json的键值要用引号。

注意:json可以是整型、浮点型、字符串(在双引号中)、布尔值(true或false)、数组(在方括号中)、对象(在花括号中)、null等数据类型。

举个栗子:

{//定义了一个json对象
  "staff":[//定义了一个数组
    {"name":"王大锤","age":21},//定义了一个name对象
    {"name":"叫兽","age":35}
  ]
}
登入後複製

(6)json解析:eval()和JSON.parse()两种方式解析成JSON形式

两种方法比较:建议使用JSON.parse()方法解析成JSON形式

eval();不安全,如果json中有函数或js程序代码(alert或一个window.location.href()跳转链接病毒网站等),会优先执行代码,危险操作。JSON.parse();对json文件具有校验功能,如果json文件里面有程序脚本,会解析报错。

举个栗子:

var jsondata='{
    "staff":[{
            "name":"王大锤",
            "age":22
        },
        {
            "name":"叫兽",
            "age":23
        },
        {
            "name":"王尼玛",
            "age":24
        }
    ]
}';

var jsonobj=JSON.parse(jsondata);//JSON.parse解析JSON
var jsonobj=eval('(' + jsondata + ')');//eval解析JSON

alert(jsonobj.staff[0].name);
登入後複製

注意:上面书写是错误的,只为了看清楚。逗号不是分隔符,逗号是文本内容,所有的都应该紧凑写,不能自己为了看清楚,人为用空格分开。(这里找了一个小时错误...)

(7)json验证工具:JSONLint

(8)举个栗子:

使用json,首先需要服务器端的约定,
用此种方法能够减少更多的判断,以更加优雅的形式显示
{
    //前端规则验证、后端数据验证
    "success":true,//是否正确执行(表单等规则验证)
    "msg":"×××"//请求的响应值是否成功(http响应返回的信息)
}
登入後複製
服务器端部分代码:
//echo "参数错误,员工信息填写不全";
echo '{"success":false,"msg":"参数错误,员工信息填写不全"}';

if($query){
    //echo "员工:" . $_POST["username"] . " 信息保存成功!";
    echo '{"success":true,"msg":"员工保存成功"}';
}else{
    //echo "员工:" . $_POST["username"] . " 信息保存失败!";
    echo '{"success":false,"msg":"员工保存失败"}';
}
登入後複製
客户端json代码:其它不变,将服务器端响应传过来的responseText(文本形式)转换为(JSON形式),将json字符串转化为了一个json对象data,然后就能够以对象的形式处理数据
    request.onreadystatechange=function(){
        if(request.readyState===4){
            if(request.status===200){
                //将服务器端响应传过来的responseText(文本形式)转换为(JSON形式)
                //将json字符串转化为了一个json对象data
                var data=JSON.parse(request.responseText);
                if(data.success){
                    document.getElementById("createResult").innerHTML=data.msg;
                }else{
                    document.getElementById("createResult").innerHTML="出现错误"+data.msg;
                }
            }
        }
    }
登入後複製

4.jQuery中的AJAX

(1)使用jquery实现ajax请求:作用:避免兼容问题,代码简洁,操作快捷方便。

(2)语法:jQuery.ajax([settings])

  • type:类型,“POST”或“GET”,默认为“GET”。

  • url:发送请求的地址。

  • data:是一个对象,连同请求发送到服务器的数据。

  • dataType:预期服务器返回的数据类型。如果不指定,jQuery将自动根据HTTP包MIME信息来智能判断,一般我们采用json格式,可以设置为“json”。

  • success:是一个方法,请求成功后的毁掉函数。传入返回后的数据,以及包含成功代码的字符串。

  • error:是一个方法,请求失败时调用此函数。传入XMLHttpRequest对象。

相关推荐:

PHP与Ajax调用

php与ajax实现页面自动刷新

PHP与Ajax相结合实现登录验证小Demo_PHP


以上是PHP與AJAX實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP 是 PHP 的開源框架。它旨在使應用程式的開發、部署和維護變得更加容易。 CakePHP 基於類似 MVC 的架構,功能強大且易於掌握。模型、視圖和控制器 gu

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

為了進行文件上傳,我們將使用表單助理。這是文件上傳的範例。

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 是一個開源MVC 框架。它使應用程式的開發、部署和維護變得更加容易。 CakePHP 有許多函式庫可以減少大多數常見任務的過載。

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

See all articles