最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用jQuery的ajax方法向服務器發(fā)出get和post請求的方法

 更新時間:2017年01月13日 09:02:59   作者:yangtoude  
這篇文章主要介紹了使用jQuery的ajax方法向服務器發(fā)出get和post請求的方法,需要的朋友可以參考下

打算寫個ajax系列的博文,主要是寫給自己看,學習下ajax的相關知識和用法,以更好的在工作中使用ajax。

假設有個網站A,它有一個簡單的輸入用戶名的頁面,界面上有兩個輸入框,第一個輸入框包含在一個form表單里用來實現form提交,第二個輸入框是單獨的、沒有包含在form里,下面就用這兩個輸入框來學習下jQuery的ajax。

1,前端的html和javascript代碼

頁面html

<main style="text-align: center; margin: 200px auto;">
   <h2>輸入用戶名</h2>
   <form class="" action="demo01.php" method="post" style="margin-bottom: 20px;">
   <input id="user-name" type="text" name="username" placeholder="請?zhí)顚懩挠脩裘?>
    <input type="submit" name="submit1" value="form提交1" class="input">
   </form>
   <input id="user-name2" type="text" name="username2" placeholder="請?zhí)顚懩挠脩裘?>
   <input type="button" name="submit2" value="ajax提交2">
   <div class="box">
   </div>
  </main>
  <script src="../../js/jquery-3.1.0.min.js"></script>
  <script src="demo.js"></script>

頁面中引入的demo01.js代碼,注意此處實現的是一個簡單的GET請求。

 $(function($) {
  $('input[name=submit2]').on('click', function(e) {
   let username = '';
   if ('' !== (username = $('#user-name2').val())) {
    $.ajax({
     url: `demo.php?name=${username}`,
     dataType: 'json',
     method: 'GET',
     success: function(data) {
      if (data.result == 1) {
       $('.box').html(`<div>你的姓名${username}已成功保存。</div>`);
      }
     },
     error: function(xhr) {
      // 導致出錯的原因較多,以后再研究
      alert('error:' + JSON.stringify(xhr));
     }
    })
    .done(function(data) {
     // 請求成功后要做的工作
     console.log('success');
    })
    .fail(function() {
     // 請求失敗后要做的工作
     console.log('error');
    })
    .always(function() {
     // 不管成功或失敗都要做的工作
     console.log('complete');
    });
   }
  });
 });

jQuery的ajax()方法有兩種寫法,分別是: $.ajax(url [, settings]); 和 $.ajax([settings]); 兩種寫法都可以,感覺第一種方法適合用于參數較少的情況,比如,如果只是對一個url做一個簡單的請求,不對返回的數據、格式和錯誤有要求,只需要傳遞一個url參數就可以,那就可以用第一種寫法。上面的demo01.js中采用的是第二種寫法,下面解釋下參數和相關的函數。

(1)上面代碼中ajax()的參數

可以看到這里的參數類型都是javascript對象,即都是 o = {key: value}; 這種類型的數據。jQuery的文檔中規(guī)定了,這里的參數只能是PlainObject(對象類型的對象),不能是null、自定義的數組、或者像docement這種歸屬于某種執(zhí)行環(huán)境(比如瀏覽器)屬于某種類型的對象。這里不太好說清楚,可以做個小試驗。在命令行里打開node repl,進行下測試:

> node
 > typeof(null);
 'object'
 > typeof([]);
 'object'
 > typeof(document);
 'undefined'
 > typeof({});
 'object'

可以看到null、[](數組類型)、{}(對象類型)都是對象。因為在js中一切皆對象。而在交互式環(huán)境中,document則是未定義的一個變量,所以它的類型是undefined。如果在瀏覽器環(huán)境下測試下typeof(document),那么它的類型也是object。下面逐個解釋下代碼用到的參數:

url,要請求的url地址,它的值應該是包含url的字符串。

dataType,字符串。發(fā)出請求后,期望從服務器返回的數據類型。可以指定的類型有xml、html、script、json、jsonp、text。如果不指定,jquery會基于MIME做判斷,并會返回一個下面xml、json、script、html當中的一種類型。

method,字符串。HTTP請求方法,默認為GET,上面代碼中指定為POST。

success, Type: Function( Anything data, String textStatus, jqXHR jqXHR ) ,匿名函數。HTTP請求成功后要調用的函數,可以傳遞三個參數給它:從服務器返回的數據(如果上面指定了dataType,則服務器返回的數據類型需要與上面dataType指定的類型一致)、一個可以描述狀態(tài)的字符串textStatus、還有一個jqXHR對象??梢钥吹缴厦嬷粋鬟f了從服務器返回的數據data。

error, Type: Function( jqXHR jqXHR, String textStatus, String errorThrown ) ,匿名函數。HTTP請求失敗后要調用的函數,同樣也可以傳遞三個參數。

除了用到的這些參數,還有許多其他的如:async、dataFilter、mimeType等其他參數,不過現在的這個簡單的腳本還用不到那么多參數。

(2)“延遲加載函數”

上面代碼中 $.ajax().done().fail().always() jqXHR.done()、jqXHR.fail()、jqXHR.always()中分別可以添加deferred對象被解析、被拒絕、被解析或被拒絕這三種情況下的要處理的工作,比如添加個函數什么的。為什么能夠這么做呢,這要看$.ajax()返回了什么,它返回的是jqXHR對象(jquery版本大于1.5時)。這個對象實現了Promise interface(Promise機制,用來傳遞異步操作消息,代表了某個未來才會知道結果的事件)。這就允許在一次請求中添加多個回調函數,甚至可以在請求完成后添加回調函數。

標題“延遲加載”描述的不夠準確,但從效果上看是有延遲加載的效果。關于這個問題更詳細的解釋可以參考jQuery文檔中對jqXHR的解釋  或一位前端前輩的解釋jQuery的deferred對象詳解 。

 2,后端運行在nginx服務器上的php代碼

后端的邏輯很簡單:我們把前端獲取的數據保存到名為data-demo01的文件中,保存成功則向前端返回一個1作為標志。

(1)前端ajax發(fā)起GET請求

如果前端的ajax發(fā)起的是一個GET請求,那么后端也比較好處理:

  if (isset($_GET['name']) && !empty($_GET['name'])) {
   $username = trim($_GET['name']);
   if (file_put_contents('data-demo01', $username)) {
    echo '{"result": 1}';
   } 
}

(2)前端ajax發(fā)起POST請求

js代碼中需要修改下ajax()的url、method參數,并增加一個data參數,修改后如下:

 // 相同的代碼省略
 $.ajax({
  url: `demo01.php`,
  dataType: 'json',
  method: 'POST',
  data: {"username": username},
 // 相同的代碼省略

因為用POST傳遞數據,所以去掉url中用來傳遞數據的參數,下面的data類型要與dataType一致,為json格式,然后將username作為值傳遞。

那么后端的代碼也就可以確定了:

 if (isset($_POST['username']) && !empty($_POST['username'])) {
   $username = trim($_POST['username']);
   if (file_put_contents('data-demo01', $username)) {
    echo '{"result": 1}';
   }
  }

如果不出錯的話,效果應該是下面這樣然后查看下data-demo01,名字果然被保存了。

那么問題來了,如果出錯了呢?比如data-demo01文件不可寫,或者后臺服務器返回的數據格式有錯誤,或者網絡出錯。那又該怎么處理呢?我現在也不太清楚,后續(xù)再研究吧。

以上所述是小編給大家介紹的使用jQuery的ajax方法向服務器發(fā)出get和post請求的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

相關文章

  • jquery select下拉框操作的一些說明

    jquery select下拉框操作的一些說明

    公司網站目前的訪問用戶中使用IE6.0的站50%以上,所以必需兼容IE6.0,使用jquery在IE6.0中設置下拉框時會有以下一些問題
    2010-04-04
  • 完美兼容各大瀏覽器的jQuery仿新浪圖文淡入淡出間歇滾動特效

    完美兼容各大瀏覽器的jQuery仿新浪圖文淡入淡出間歇滾動特效

    本文是作者學習jQuery之后練手之作,兼容各大瀏覽器,非常的精美實用,這里放出來給小伙伴們,有需要的直接拿走,別跟我客氣^_^
    2014-11-11
  • jQuery可見性過濾選擇器用法示例

    jQuery可見性過濾選擇器用法示例

    這篇文章主要介紹了jQuery可見性過濾選擇器用法,結合實例形式分析了jQuery針對元素hidden屬性的過濾操作相關技巧,需要的朋友可以參考下
    2016-09-09
  • jquery實現購物車功能

    jquery實現購物車功能

    這篇文章主要為大家詳細介紹了jquery實現購物車功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • jquery append 動態(tài)添加的元素事件on 不起作用的解決方案

    jquery append 動態(tài)添加的元素事件on 不起作用的解決方案

    這篇文章主要介紹了jquery append 動態(tài)添加的元素事件on 不起作用的解決方案,需要的朋友可以參考下
    2015-07-07
  • jQuery數據類型小結(14個)

    jQuery數據類型小結(14個)

    jQuery除了包含原生JS中的內置數據類型(built-in datatype),還包括一些擴展的數據類型(virtual types),如Selectors、Events等,通過本文給大家分享14個jquery數據類型,感興趣的朋友一起學習吧
    2016-01-01
  • 用jQuery打造TabPanel效果代碼

    用jQuery打造TabPanel效果代碼

    這次我們要實現的控件時Tab控件,在實際的應用中也比較多
    2010-05-05
  • JQuery調用WebServices的方法和4個實例

    JQuery調用WebServices的方法和4個實例

    你是不是經常作這種開發(fā),前端用JS寫邏輯,后端用aspx或者ashx作服務?你是不是經常在請求aspx的時候在查詢字符串中拼接諸如a.aspx?method=getDepartmetn&param1=1&param2=2的字符串?
    2014-05-05
  • jQuery中 delegate使用的問題

    jQuery中 delegate使用的問題

    本文主要給大家介紹的是在jQuery中使用delegate的時候遇到的幾個小小的坑,主要是習慣了使用bind,live,一時改不過來的問題,這里記錄下來推薦給大家。
    2015-07-07
  • jQuery zclip插件實現跨瀏覽器復制功能

    jQuery zclip插件實現跨瀏覽器復制功能

    這篇文章主要介紹了jQuery zclip插件實現跨瀏覽器復制功能的方法,以及在實現過程中遇到的問題,感興趣的小伙伴們可以參考一下
    2015-11-11

最新評論

九龙坡区| 偏关县| 清原| 高雄市| 高邮市| 崇阳县| 德保县| 都江堰市| 扶余县| 山丹县| 阜宁县| 姜堰市| 株洲县| 攀枝花市| 时尚| 海南省| 平山县| 龙泉市| 贺兰县| 子长县| 青河县| 舞阳县| 博湖县| 湟源县| 镇康县| 巴里| 尚义县| 和平区| 景谷| 秀山| 云南省| 阜阳市| 唐海县| 芷江| 武城县| 桑植县| 松潘县| 元氏县| 慈利县| 宾阳县| 闻喜县|