搜尋
首頁web前端js教程jQuery如何向伺服器發出get和post請求

這次帶給大家jQuery怎麼會向伺服器發出get和post請求,jQuery向伺服器發出get和post請求的注意事項有哪些,下面就是實戰案例,一起來看一下。

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

1,前端的html和javascript程式碼

頁面html

<main>
   <h2 id="输入用户名">输入用户名</h2>
   <form>
   <input>
    <input>
   </form>
   <input>
   <input>
   <p>
   </p>
  </main>
  <script></script>
  <script></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(`<p>你的姓名${username}已成功保存。</p>`);
      }
     },
     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的文檔中規定了,這裡的參數只能是PlainObject(物件類型的物件),不能是null、自訂的陣列、或者像docement這種歸屬於某種執行環境(例如瀏覽器)屬於某種類型的對象。這裡不太好說清楚,可以做個小試驗。在命令列裡開啟node repl,進行下測試:

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

可以看到null、[](陣列類型)、{}(物件類型)都是物件。因為在js中一切皆物件。而在互動式環境中,document則是未定義的變量,所以它的類型是undefined。如果在瀏覽器環境下測試下typeof(document),那麼它的型別也是object。下面逐一解釋下程式碼用到的參數:

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

dataType,字串。發出請求後,期望從伺服器傳回的資料類型。可以指定的類型有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指定的類型一致)、一個可以描述狀態的字串textStatus、還有一個jqXHR物件。可以看到上面只傳遞了從伺服器傳回的資料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发起GET请求

如果前端的ajax发起的是一个GET请求,那么后端也比较好处理:

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

(2)前端ajax发起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文件不可写,或者后台服务器返回的数据格式有错误,或者网络出错。那又该怎么处理呢?我现在也不太清楚,后续再研究吧。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

html直接显示JSON方法详解

PHP操作JSON方法大全

以上是jQuery如何向伺服器發出get和post請求的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript框架:為現代網絡開發提供動力JavaScript框架:為現代網絡開發提供動力May 02, 2025 am 12:04 AM

JavaScript框架的強大之處在於簡化開發、提升用戶體驗和應用性能。選擇框架時應考慮:1.項目規模和復雜度,2.團隊經驗,3.生態系統和社區支持。

JavaScript,C和瀏覽器之間的關係JavaScript,C和瀏覽器之間的關係May 01, 2025 am 12:06 AM

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr

node.js流帶打字稿node.js流帶打字稿Apr 30, 2025 am 08:22 AM

Node.js擅長於高效I/O,這在很大程度上要歸功於流。 流媒體匯總處理數據,避免內存過載 - 大型文件,網絡任務和實時應用程序的理想。將流與打字稿的類型安全結合起來創建POWE

Python vs. JavaScript:性能和效率注意事項Python vs. JavaScript:性能和效率注意事項Apr 30, 2025 am 12:08 AM

Python和JavaScript在性能和效率方面的差異主要體現在:1)Python作為解釋型語言,運行速度較慢,但開發效率高,適合快速原型開發;2)JavaScript在瀏覽器中受限於單線程,但在Node.js中可利用多線程和異步I/O提升性能,兩者在實際項目中各有優勢。

JavaScript的起源:探索其實施語言JavaScript的起源:探索其實施語言Apr 29, 2025 am 12:51 AM

JavaScript起源於1995年,由布蘭登·艾克創造,實現語言為C語言。 1.C語言為JavaScript提供了高性能和系統級編程能力。 2.JavaScript的內存管理和性能優化依賴於C語言。 3.C語言的跨平台特性幫助JavaScript在不同操作系統上高效運行。

幕後:什麼語言能力JavaScript?幕後:什麼語言能力JavaScript?Apr 28, 2025 am 12:01 AM

JavaScript在瀏覽器和Node.js環境中運行,依賴JavaScript引擎解析和執行代碼。 1)解析階段生成抽象語法樹(AST);2)編譯階段將AST轉換為字節碼或機器碼;3)執行階段執行編譯後的代碼。

Python和JavaScript的未來:趨勢和預測Python和JavaScript的未來:趨勢和預測Apr 27, 2025 am 12:21 AM

Python和JavaScript的未來趨勢包括:1.Python將鞏固在科學計算和AI領域的地位,2.JavaScript將推動Web技術發展,3.跨平台開發將成為熱門,4.性能優化將是重點。兩者都將繼續在各自領域擴展應用場景,並在性能上有更多突破。

Python vs. JavaScript:開發環境和工具Python vs. JavaScript:開發環境和工具Apr 26, 2025 am 12:09 AM

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器