ホームページ  >  記事  >  ウェブフロントエンド  >  AJAXの非同期機能の実装方法

AJAXの非同期機能の実装方法

零到壹度
零到壹度オリジナル
2018-04-08 17:19:562154ブラウズ


この記事では、AJAXの非同期関数の実装方法について説明します。JavaScriptの初心者に最適です。 AJAXの非同期機能についての小さな実験 ajaxの非同期

機能を実験するには、まずWebプロジェクトを構築します。構造はおそらく次のようになります

TestServlet.java (主にajax バックグラウンド呼び出しを提供するプログラム)

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class TestServelet
 */
 @WebServlet("/TestServelet")
 public class TestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
     /**
     * Default constructor. 
     */
    public TestServlet() {
    }    
    
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        
    //为了体现程序的异步性,先让它睡3s
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        response.setCharacterEncoding("utf-8");  
        //打印出程序运行的时间
        System.out.println("异步程序运行时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS") .format(new Date()));
    }    
    
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

testAjax.jsp (フロント ページと js、非同期呼び出しをトリガーする)AJAXの非同期機能の実装方法

<%@ page language="java" contentType="text/html;charset=UTF-8" %>
<html >
<head></head>
<body onload="testajax()">
    Hello Ajax!<br>
</body>
</html>
<SCRIPT LANGUAGE="JavaScript">
    function testajax(){
        fnGetAjaxReturn(&#39;http://localhost:8080/TestProject/TestServlet?a=&#39;+Math.random());
    }    
    
    function fnGetAjaxReturn(url)
    {   
        var userAgent = navigator.userAgent;        
        var http_request = false;        
        //开始初始化XMLHttpRequest对象
        if(window.XMLHttpRequest) { //Mozilla 浏览器
            http_request = new XMLHttpRequest();            
            if (http_request.overrideMimeType) {//设置MiME类别
                http_request.overrideMimeType("text/xml");
            }
        }        
        //else if (window.ActiveXObject) { // IE浏览器
        else if (window.ActiveXObject||userAgent.indexOf("Trident") > -1){          
           try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {alert("错了吧");}
            }
        }        if (!http_request) { // 异常,创建对象实例失败
            window.alert("不能创建XMLHttpRequest对象实例.");            
            return false;
        }
        http_request.open("GET", url, true);//true 异步  false 同步 
        http_request.send();
        alert("异步请求之后执行时间:"+new Date +&#39;\n毫秒数:&#39;+ new Date().getMilliseconds());
    }</script>

手順

: jsp ページがロードされた後、js が呼び出され、非同期リクエストが発行されます。最初に js が実行され、次にアラート ポップアップ操作が実行されます。

実験を始めましょう


IEブラウザを使用してURLを実行してください

http://localhost:8080/TestProject/testAjax.jsp

プログラムが最初に警告をポップアップ表示し、3秒後に警告が表示されることがわかりました、ajax バックグラウンドの結果が返されます。これは、ajax の非同期の性質を完全に証明しています。
動作結果:

時間差から、プログラムが先に終了し(アラートが実行され)、3秒後に非同期プログラムが結果を返していることがわかります。

AJAXの非同期機能の実装方法逆に、jspファイルの

http_request.open("GET", url, true);

tru​​eをfalse
に変更したらどうなるでしょうか?

URL を実行すると、サーブレット バックグラウンド リクエストが返されるのを待った後、プログラムが js 内のコード アラートの最後の部分を実行することがわかります。これはいわゆる同期呼び出しです。

走行結果は以下の通りです:

終了!

以上がAJAXの非同期機能の実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。