jQuery Ajax

来源:https://www.cnblogs.com/xiukang/archive/2018/04/27/8964313.html
-Advertisement-
Play Games

測試jQuery模板 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jQuery Ajax</title> <!-- 引用線上jQuery文件 --> <script src="https://code.j ...


測試jQuery模板
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery Ajax</title>
    <!-- 引用線上jQuery文件 -->
    <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
</head>
<body>

</body>
</html>
load()方法
  • 靜態頁面
index頁面:
<button>按鈕</button>
<div id="xiu"></div>
text頁面:
<p class="p">文章</p>
<p>內容</p>

點擊按鈕在index頁面的div裡面載入text頁面

$('button').click(function(){
    $('#xiu').load('text.html')
})

對載入的HTML篩選

$('button').click(function(){
    $('#xiu').load('text.html .p') //只顯示class為p的文章
})
  • 動態頁面
index頁面:
<button>按鈕</button>
<div id="xiu"></div>

不傳遞data(預設get提交)

js文件

$("button").click(function(){
    $("#xiu").load("php/text.php?url=kang");
})

 text.php文件

if($_GET["url"]=="kang"){
    echo "成功";
}else {
    echo "失敗";
}

傳遞data(post提交)

js文件

$("button").click(function(){
    $("#xiu").load("php/text.php",{
        url:'kang'
    })
})
php文件
if($_POST["url"]=="kang"){
    echo "成功";
}else {
    echo "失敗";
}
在Ajax數據載入完畢後,就能執行回調函數,也就是第三個參數 回調函數有三個可選參數
$("button").click(function(){
    $("#xiu").load("php/text.php",{},function(resp,stat,xhr){
        alert(resp);//返回PHP數據
        $("#xiu").html(resp + "添加");//修改resp數據
        alert(stat);//成功返回:success,錯誤返回:error
        alert(xhr);//返回對象
    });
})

 xhr對象屬性

$get()和$post() .load()方法是局部方法,因為他需要包含元素的JQuery對象作為首碼, $.get()和$.post()是去全局方法,無需指定某個參數 對用途而言,.load()適合做靜態文件的非同步獲取,而對於需要傳遞參數到伺服器頁面的,$.get()和$.post()更加合適 $get()方法有四個參數,前面三個參數和.load()一樣,多了一個第四個參數type,即伺服器返回內容的格式(xml,html,script,json,jsonp,text)
<?php
    if($.GET['url']=='xx'){
      echo "url=xx列印"
    }
?>
  • 方式一:通過直接在URL問號緊跟傳參(post()不支持方法一)
$("button").click(function(){
    $.get("text.php?url=xx&a=b",function(resp,stat,xhr){
      $("#xiu").html(resp)
    })
})

 

  • 方式二:通過第二個參數data,字元串形式的鍵值對傳參,然後自動轉換為URL問號緊跟傳參
$("button").click(function(){
    $.get("text.php","url=xx",function(resp,stat,xhr){
      $("#xiu").html(resp)
    })
})

 

  • 方式三:通過第二個參數data,對象形式的鍵值對傳參,然後自動轉換為URL問號緊跟傳參
$("button").click(function(){
    $.get("text.php",{
    url:xx
    },function(resp,stat,xhr){
    $("#xiu").html(resp)
    })
})
  • 第四個參數
第四個參數type是指定非同步返回的類型,一般情況下type參數是智能判斷,並不需要我們主動設置,如果主動設置,則會強行按照指定類型格式返回
$("button").click(function(){
    $.get("text.php","url=xx",function(resp,stat,xhr){
      $("#xiu").html(resp)
    },"html") //本身是超文本,如果強行按照xml或者json數據格式返回的話,那就無法獲取數據
})

非同步載入xml

<?xml version="1.0"?>
<root>
    <url>xx</url>
</root>

 

$("button").click(function(){
    $.get("text.xml",function(resp,stat,xhr){
    alert($(resp).find("root").find("url").text()) //輸出xx
    },"xml") //如果強行設置html數據格式返回的話,會把源文件輸出
})
  • 非同步載入json
[
    {
    "url" : "xx"
    }
]

 

$("button").click(function(){
    $.get("text.json",function(resp,stat,xhr){
    alert(resp[0].url) //輸出xx
    },"json") //如果強行設置html數據格式返回的話,會把源文件輸出
})
  • $.post()和$.get()的區別
GET請求是通過URL提交的,而POST請求則是HTTP信息實體提交 GET提交有大小限制(2KB),而POST方式不受限制 GET方式會被緩存下來,可能有安全問題,而POST不會緩存 GET方式通過$_GET[]獲取,POST方式通過$_POST[]獲取 $.getScript()和$.getJSON() $.getScript()用於載入js文件
$("button").click(function(){
    $.getScript("text.js")
})
$.getJSON()用於載入json文件
$("button").click(function(){
    $.getJSON("text.json",function(resp,stat,xhr){
    alert(resp[0].url)
    })
})
$.ajax() $.ajax()是所有Ajax方法中最底層的方法,所有的其他方法都是基於$.ajax()方法的封裝,這個方法只有一個參數
  • 最基本的底層Ajax提交
$("button").click(function(){
    $.ajax({
        type : "POST", //預設GET提交
        url : "text.php", //提交的地址
        data : {
            url : xx
        },
        success : function(response,status,xhr){
             $(".xiu").html(response)
        }
    })
})
  • 最基本的表單提交
HTML頁面:
<form>
    <input type="text" name="user"/>
    <input type="text" name="pass"/>
    <input type="radio" name="sex" value="男"/><input type="button" value="提交"/>
</form>
PHP頁面:
<?php
    echo $_POST["user"]."*".$_POST["pass"]
?>
JavaScript頁面:
$("input[type=button]").click(function(){
    type : "POST",
    url : "text.php",
    data : {
    user : $("input[name=user]").val(),
    pass : $("input[name=pass]").val()
    }
    //data : $("form").serialize(), //表單序列化,可以不用寫上面的data對象
    success : function(resp,stat,xhr){
    $(".xiu").html(resp);
    }
})
  • .serialize()方法不但可以序列化表單的元素,還可以直接獲取單選框,覆選框和下拉框等內容
$("input[name=sex]").click(function(){
    $(".xiu").html($(this).serialize());
    //serialize()方法進行傳輸的時候進行了編碼,所以需要decodeURIComponent()進行解碼才能正常顯示
    $(".xiu").html(decodeURIComponent($(this).serialize()))
})
  • .serializeArray()這個方法可以直接把數據整合成鍵值對的JSON對象
$("input[name=sex]").click(function(){
    console.log($(this).serializeArray()); //console.log()可以列印任何數據類型
    var json = $(this).serializeArray();
    $(".xiu").html(json[0].value); //頁面上列印輸出
})

 

  • 初始化重覆的屬性
$.ajaxSetup({
    type : "POST",
    url : "text.php",
    date : $("form").serialize()
})
$("input[type=button]").click(function(){
    success : function(resp,stat,xhr){
    $(".xiu").html(resp);
    }
})

 

  • 響應前後載入
$(document).ajaxStart(function(){
    alert("Ajax載入前執行");
}).ajaxStop(function(){
    alert("Ajax載入後執行");
})

 

  • 全局執行的順序
$(document).ajaxSend(function(){
    alert("發送請求前執行");
}).ajaxComplete(function(){
    alert("請求完成後執行,不管對錯最後執行");
}).ajaxSuccess(function(){
    alert("請求成功後執行");
}).ajaxError(funtion(){
    alert("請求失敗後執行");
})
有時程式對於複雜的序列化解析能力有限,可以使用$.param()方法將對象轉換為字元串鍵值對格式可以更加穩定准確的傳遞表單內容
$("input[type=button]").click(function(){
    type : "POST",
    url : "text.php",
    data : $param({
    user : $("input[name=user]").val(),
    pass : $("input[name=pass]").val()
    }),
    success : function(resp,stat,xhr){
    $(".xiu").html(resp);
    },
    error : function(xhr,errorText,errorType){
    alert("自定義錯誤")
    alert(errorText+"*"+errorType)
    alert(xhr.status+"*"+xhr.statusText)
    },
    timeout : 1000, //設置響應時間後停止
    global : false, //取消全局事件
})

 

  • JSON和JSONP
在同域的情況下,$.ajax()方法只要設置dataType屬性即可載入JSON文件
<?php
    $xiu = array('a'=>1,'b'=>2,'c'=>3)
    $kang = json_encode($xiu) //將數組轉換為json格式
    echo $kang
?>

 

$.ajax({
    url : "text.php",
    dataType : "json",
    success : function(ersponse,status,xhr){
    alert(ersponse.a); //輸出1
    }
})

 

在非同域的情況下,可以使用JSONP(非官方的協議) 它允許伺服器端集成返回至客戶端 通過JavaScript callback的形式實現跨越訪問(這僅僅是JSONP簡單的實現形式) <?php     $xiu = array('a'=>1,'b'=>2,'c'=>3)     $kang = json_encode($xiu) //將數組轉換為json格式     $anni = $_POST("callback")     echo $anni."($kang)" ?>
  • $_getJSON()方法跨域獲取JSON
$_getJSON("http://www.xiu.com/text.php?callback=?",function(response,status,xhr){
  $(".xiu").html(response.a)  
})

 

  • 使用$_ajax()方法跨域獲取JSON的兩種方式
$.ajax({
    url : "http://www.xiu.com/text.php?callback=?",
    dataType : "json",
    success : function(response,status,xhr){
    $(".xiu").html(response.a)
    }
})

 

$.ajax({
    url : "http://www.xiu.com/text.php",
    dataType : "jsonp",
    success : function(response,status,xhr){
    $(".xiu").html(response.a)
    }
})

 

jqXHR對象
  • 獲取jqXHR對象
var jqXHR = $.ajax({})  如果使用jqXHR對象的話,建議用.dome(),.always()和.fail()代替.success(),.complete()和.error()  列如成功後回調函數
jqXHR.dome(function(response,status,xhr){
    $(".xiu").html(response)
})

 

使用jqXHR的連綴方式比$.ajax()的屬性方式有三大優點 1.可連綴操作,可讀性大大提高
jqXHR.dome().dome() //同時執行多個成功後的回調函數

 

2.可以多次執行同一個回調函數 3.為多個操作指定回調函數
var jqXHR = $.ajax("text.php")
var jqXHR2 = $.ajax("text2.php")
$.when(jqXHR,jqXHR).done(function(x,y){
    alert(x[0])
    alert(y[0])
})
 

 

   
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • MongoDB 中的關係運算符,邏輯運算符,數組條件,內嵌文檔,正則過濾,正、倒序排序,限定數量 ...
  • 首先,需要打開手機的USB調試和微信的TBS 調試。然後,打開chrome://inspect,點擊Inspect。此時,如果沒有Fan牆或使用離線開發者工具包,會出現空白頁面: 解決方法: Fan牆或使用離線開發者工具包後,還是會出現左側空白,簡單修改css樣式激活一下就可以了,如下動圖演示: 微 ...
  • 一、項目介紹 【知識準備】 ①Android Interface definition language(aidl,android介面定義語言),其目的實現跨進程的調用。進程是程式在os中執行的載體,一個程式對應一個進程,不同進程就是指不同程式,aidl實現不同程式之間的調用。 ②主線程與子線程通信 ...
  • 做安卓開發時一定要註意,主線程不能更改UI界面,如果出現程式運行時崩潰的情況,如果沒有明顯的語法錯誤,請檢查自己的進程是否出現衝突,崩潰。如果有與後臺的連接,即請求向伺服器發送請求的時尤其需要註意,或出現沒有報錯,但就是網路請求這段代碼不會執行,這種情況下,如果設置的參數或者其他地方沒有什麼問題,但 ...
  • 前言: ​ 這是每天看github上面的一位大佬 "冴羽" [的博客 自己加以自己的理解總結的 是指程式源碼中定義變數的區域 作用域決定瞭如何查找變數,也就是度額定當前執行代碼對變數的訪問許可權 JavaScript 使用的是 (lexical scoping) 也就是靜態作用域 靜態作用域與動態作用 ...
  • 先上效果預覽: Web Components 首先,什麼是 Web Components ? "MDN" 給出的定義是: Web Components 是一套不同的技術,允許您創建可重用的定製元素(它們的功能封裝在您的代碼之外)並且在您的web應用中使用它們。 ... ... 實現web compo ...
  • 今天在寫html5中播放曠視C2攝像頭視頻監控的功能,查了很多資料,才發現Html5 <video>並不支持rtsp協議。後來查到使用第三方轉碼才得以實現。 這裡把方法寫下來分享給大家。 首先要獲取攝像機品牌的RTSP地址: 如大華的是 rtsp://user:pwd@ip:port/cam/ re ...
  • 前言 之前用餓了麽印象最深刻的是聯動菜單和小球飛入購物車動畫,所以想看看別人是怎麼實現的,但是看了很多仿餓了麽的demo都是實現了一個完整的大的項目,要找到那個小模塊很麻煩,所以自己將聯動菜單和動畫提取出來寫了一個demo,方便學習。 目的只是想突出功能所以界面細節很relax,大家也relax的看 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...