1. 程式人生 > >javascript原生程式碼實現ajax請求

javascript原生程式碼實現ajax請求

之前做的轉盤抽獎中用到了ajax獲取後臺引數,於是把ajax相關的內容都學習了一下,之前做的是用jquery的ajax()函式來寫的,為了能理解透徹,學習瞭如何用js原生程式碼實現ajax

Ajax的核心是XMLHttpRequest物件
1、建立XMLHttpRequest物件

var xhr = new XMLHttpRequest();

2、XHR的用法
(1) 呼叫open()方法,它接受三個引數(要傳送請求的型別,請求的URL,表示是否非同步傳送請求的布林值);呼叫open()並不會真正傳送請求,只是啟動一個請求以備傳送;
(2) 呼叫send()方法,它接受一個引數,即要作為請求主體傳送的資料。
伺服器收到響應後,響應的資料會自動填充XHR物件的屬性。相關屬性有:
responseText:作為響應主體被返回的文字
responseXML:響應資料的XML DOM文件
status:響應的HTTP狀態,200響應成功和304表示響應有效
statusText:HTTP狀態的說明
XHR的readyState屬性表示請求響應過程的當前活動階段,只要readyState屬性的值發生改變,就會觸發一次readystatechange事件。readyState=4,表示響應完成,已經收到了全部響應資料,所以我們只對這個階段感興趣。在呼叫open()之前指定onreadystatechange,可以保證跨瀏覽器的相容性。

var xhr = new XMLHttpRequest();       
            xhr.onreadystatechange = function(){
                if (xhr.readyState == 4){
                    if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){
                        alert(xhr.responseText);
                    } else
{ alert("Request was unsuccessful: " + xhr.status); } } };

請求方式有兩種:GET和POST

GET請求是最常見的請求型別,用於向伺服器查詢某些資訊;
POST請求用於向伺服器傳送應該被儲存的資料。

我的html程式碼如下:

<form id="info" method="post">
                    <div class="br">
                        <lable
>
寶貝暱稱:</lable> <input type="text" id="baby-name" name="baby-name"> <lable>聯絡電話:</lable> <input type="text" id="phone" name="phone"> </div> <div class="br"> <lable>照片描述:</lable> <input type="text" id="photo-content" name="photo-content"> </div> </form>

js程式碼:

/*序列化表單資料*/
    function serialize(form){        
        var parts = new Array();
        var field = null;
        for (var i=0, len=form.elements.length; i < len; i++){
            field = form.elements[i];
            parts.push(encodeURIComponent(field.name) + "=" + 
            encodeURIComponent(field.value));                
        }        
        return parts.join("&");
    }
    /*xhr物件向伺服器傳資料*/
   function submitData(){
            var xhr = new XMLHttpRequest();       
            xhr.onreadystatechange = function(){
                if (xhr.readyState == 4){
                    if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){
                        alert(xhr.responseText);
                        var data = JSON.parse(xhr.responseText);
                        console.log(data);
                    } else {
                        alert("Request was unsuccessful: " + xhr.status);
                    }
                }
            };
            xhr.open("post", "db.jsp", true);
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");//使用XHR來模仿表單提交,加一個請求頭部。
            var form = document.getElementById("info");            
            xhr.send(serialize(form));
        }

這是自己寫的程式碼,本來這樣已經可以了,先是寫了一個表單序列化的函式,然後用XHR物件來實現ajax非同步請求。在學習過程中,發現了FormData這個類,它為序列化表單以及創建於表單格式相同的資料提供了便利。使用方法如下:

            var form = document.getElementById("info");  
            var data = new FormData(form);
            xhr.send(data);

但是我卻遇到了問題,原因是我後臺用的jsp程式碼,怎麼都獲取不到前端傳過來的表單資料,查了一下發現,jsp的request.getParameter()只能 recognizes application/x-www-form-urlencoded requests only. 但是我傳送了一個 multipart/form-data request.,解決方法如:這個頁面寫的挺清楚

相關推薦

javascript原生程式碼實現ajax請求

之前做的轉盤抽獎中用到了ajax獲取後臺引數,於是把ajax相關的內容都學習了一下,之前做的是用jquery的ajax()函式來寫的,為了能理解透徹,學習瞭如何用js原生程式碼實現ajax Ajax的核心是XMLHttpRequest物件 1、建立XMLHt

原生js實現ajax請求(帶請求頭header)和資料傳參過程程式碼

一、Ajax 概述 Ajax 是 Asynchronous Javascript And XML 的簡寫 Ajax是一門技術,並不是一門語言 使用XHTML+CSS來標準化呈現 使用XML和XSLT進行資料交換及相關操作 使用XMLHttpReques

原生js實現Ajax請求

amp 輸入關鍵字 如果 t對象 避免 用戶輸入 hang 更新 gate 總的來說,Ajax是與服務器交換數據並更新部分網頁的藝術,在不重新加載整個網頁的情況下,異步請求數據並刷新頁面。舉一個小的例子:Goole搜索頁面。當用戶在輸入框輸入關鍵字的時候,JavaScrip

[TensorFlowJS只如初見]實戰一·JavaScript原生程式碼實現梯度下降求最小值

[TensorFlowJS只如初見]實戰一·JavaScript原生程式碼實現梯度下降 問題描述: 求解y1 = xx -2 x +3 + 0.01*(-1到1的隨機值) 與 y2 = 0 的最小距離點(x,y) 給定x範圍(0,3 不使用學習框架,手動編寫梯度下降公式求解,提示

JavaScript原生程式碼實現樓層跳躍(js部分有註釋)

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content

JavaScript原生程式碼實現導航欄小效果

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content

利用原生js實現ajax跨域請求資料

首先,頁面中不需要引入任何的檔案。 1、前臺html頁面 <script> //定義一個ajax var $ = { ajax:function(option){ var url = option.url; var ca

原生js實現ajax非同步請求

function createXMLHttpRequest() { var xmlHttp; try { xmlHttp = new XMLHttpRequest(); } catch (e)

原生JS實現Ajax跨域請求flask響應內容

Ajax大法好,網站感覺跟高大上,但由於Js的侷限,跨域Ajax無法實現,這裡,講一下解決辦法,前提是需要能夠自己可以控制flask端的響應。 主要技術: 修改伺服器相應的相應頭,使其可以相應任意域名。and設定響應頭,使其能夠相應POST方法。 實現

Ajax原生程式碼實現和jQuery實現

一、Ajax簡介    Ajax(Asynchhronous Javascript And XML)是指一種建立網頁應用的網頁開發技術。Ajax通過後臺與伺服器進行少量的資料交換,可以使網頁實現非同步更

原生js實現ajax、jsonp

原生js 斜杠 lang settime 發送數據 tro upper 類型 之前 一、原生js實現ajax $.ajax({ url: ‘‘, type: ‘post‘, data: {name: ‘zhaobao‘, age: 20}, dataTy

原生JS實現ajax省市區三聯

cal tex -type con arr length view thead () <!-- /** * @fileName: linkageUI.class.php * @author: wk * @DateTime: 2017/10/29 17:25 * @De

原生js實現Ajax

tle 頭部 簡單 代理 字符 pen lis 交換 var 摘自:https://www.cnblogs.com/colima/p/5339227.html 一般來說,大家可能都會習慣用JQuery提供的Ajax方法,但是用原生的js怎麽去實現Ajax方法呢? J

原生js的ajax請求

數據交換 strong 當前 thead () 一個數 nbsp send 方法 什麽是ajax   AJAX是一種用於創建快速動態網頁的技術。通過在後臺與服務器進行少量數據交換,AJAX可以使網頁實現異步跟新。這意味著可以在不重新加載整個網頁的情況下,對網頁的某部分進行更

原生js的ajax請求簡單封裝

小總結:  function ajax({url,type,data,dataType}){ return new Promise(function(open,err){ //1. 建立xhr物件 var xhr=new XMLHttpRequest(); /

tp5中前端js程式碼ajax請求url問題

請注意: 在tp5框架中,js程式碼不能使用全域性函式!所以試圖使用函式{:url()}是解決不了問題的! 在社群中發帖諮詢,直接使用相對地址即可! 程式碼如下: type:'get', url:'alertinfo/drawing', data: "message="+start.

js原生程式碼實現滑鼠拖拽(超簡單)

首先先來看這一張圖 在這種圖中,盒子的大小為512px,並且margin-left:-250px margin-top:140px;並通過一些樣式讓其在中部顯示 這些樣式都不是重要的,這裡加個margin是為了讓其出現拖拽的時候出現滑鼠偏移,好做演示而已,不然margin:0 auto 就可以實現盒子

AJAX 利用JQuery實現AJAX請求

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="JqueryAjax.aspx.cs" Inherits="XXX.WebApp.JqueryAjax" %> <!DOCTYPE h

JS原生程式碼實現輪播圖(無左右滑動,底下圓點按鈕)

先上效果圖: 由於動態圖太大,所以只能截圖了;大致效果,圖片輪播的過程中,底下的灰色提示漸漸出現; 現在來說實現思路:        HTML部分: <div id="content"> <img id="img1" /> &

jquery實現Ajax請求的三種方式

jquery 對 ajax的請求進行了封裝,可以使程式碼更簡潔,也自動替我們解決了,瀏覽器問題。 jquery 提供了三種 ajax 請求的函式,分別為: $.ajax() ,  $.get()  ,