JavaScriptのDefinitive Guideの第21章Ajaxと彗星

createXHR機能(){ 
    IF {(XMLHttpRequestをTYPEOF = '未定義'!) 
        )(新しい新しいのXMLHttpRequestを返す; 
    }他のIF {(= ActiveXObjectの'未定義の' typeof演算!)

        {(= typeof演算arguments.callee.ActiveXString '文字列'!)IF 

            バージョン= VAR [ 'MSXML2.XMLHttp.6.0'、 'MSXML2.XMLHttp.3.0'、 'MSXML2.XMLHTTP']、I、LEN; 
            
            のための(I = 0、LEN = versions.length; IがLEN <; Iは++){ 
                {試み
                    //現在のバージョンが正常に作成することができるか否かを判断ActiveObject 
                    新しい新しいActiveXObjectの(バージョン[I]); 
                    arguments.callee.ActiveXStringバージョン= [I]; //セットパラメータ現在のオブジェクトなら
                    BREAK; 
                }キャッチ(エラー){ 
                    //スキップ
                }  
            }
        } 
        新しい新しいActiveXObjectの(arguments.callee.ActiveXString)を返します; //は、現在の関数のパラメータに応じてActiveXObjectを作成します
    } 
    他{ 
        スロー新しい新しいエラー( 'いいえオブジェクトXHR avilableです。'); 
    } 
} 

// XHRを作成

するvar XHR = createXHRを() ; 

xhr.onreadystatechange =関数(){ 
    IF(xhr.readySate == 4){ 
        IF(xhr.status> = 200 && xhr.status <300 || xhr.status == 304){ 
            VAR = xhr.responseText responseText。
        他{} 
            //要求は、通常の結果ではない
            アラート( '要求が失敗した:' + xhr.statusが); 
        } 
    } 
} 
(falseに、 'example.phpを' 'GET')xhr.open。//パラメータを取得/ポストのURL非同期
xhr.send(NULL); //は、データ本体の送信要求を受信する場合、GETヌル、それが提供されてもよい送信
xhr.abort(); //キャンセル要求
 
//21.1.2 HTTPヘッダー情報

xhr.setRequestHeader( 'MyHeader'、 'MyValue '); // ヘッダ情報設定要求

提出//ポスト
(真に'POST'、 'URL'を、)xhr.openを、
VARフォーム=のdocument.getElementById( 'ユーザー情報' ); 
xhr.send(シリアライズ(形態)); //シリアライズ帳票フォームデータを、フォーム提出

//21.2.1いるFormData 
//のXMLHttpRequestいるFormDataポストを最適化するために定義提出
; VARがいるFormData新しい新データ=()
(data.appendを'名前'、 'ニコラス・'); 
xhr.send(データ); 

VAR形式=のdocument.getElementById( 'ユーザー情報'); 
xhr.send(いるFormData新新(フォーム)); 

//21.2.2タイムアウト
XHR .timeout = 1000; //設定された1秒
xhr.ontimeout =関数(){ 
    アラート( '第二のDID要求に戻らない'); 
} 

//21.2.3 overrideMimeType()メソッド
xhr.overrideMimeType( 'テキスト/ XML「); //プレーンテキストXMLの代わりに、プロセスの存在に応答してリクエストオブジェクト強制
 
//21.3プログレスイベント

受信した応答データの最初のバイトに// loadstartトリガ
連続中//プログレス応答トリガ受信
要求エラーの発生し//エラー。
リンク終了するアボート()メソッドの場合、呼がトリガされるので//中止
//ロードが完了応答データ受信時にトリガ
// loadend通信が完了またはトリガ・イベント後にエラーを中断またはロードトリガされる

{()関数= xhr.onload 

} 
xhr.onprogress =関数(){ 

} 

//21.4横切るオリジンリソース共有

@ドメインセキュリティサーバは、リクエスタが提供されてもよい設けられていないクロスドメイン
//アクセス制御-許可原点ます。http:// WWW .nczonline.net 
//サーバは、ヘッダ情報ポストバック同じソースで、要求元を許可またはバック・コントロール・許可・アクセス元を送ることができた場合は、「*」

//21.4.1 IEがCORSを達成します

XDR新しい新しいXDomainRequest = VAR(); 

//21.4.3要求プリフライト
サーバは、要求がサポートされているか否かを判断するように情報を設定することによって//要求ヘッダーを
HTTP:://www.nczonline.net - // -起源アクセス制御を許可
//アクセス制御-許可-方法:POST、GET 
//アクセス制御-許可-ヘッダ:NCZ 
//アクセス制御は、許可-age:1728000の

での要求の資格情報//21.4.4 
//許可するアクセス・コントロール・Crendentials:trueに


//21.5他のクロスドメインの技術
//21.5.1のpingの画像
 のvar IMG =新しい新しいイメージ(); 
 img.onload = =関数img.onerror(){ 
     アラート( '完了!'); 
 } 
 = 'HTTP :? //www.example.com/text名=ニコラスimg.src; 


 //21.5.2 JSONP 
 スクリプトによってロード//同様のIMGとのスクリプトは、クロスドメイン制限することはできませんので、クロスドメインを達成する方法
 <スクリプトSRC =「:// localhostの:? 9090 /学生コールバック= showData HTTP」> <\ /スクリプト> // 
 //サーバがshowDataを返します。 ({名:「MAS」} ); //は、 クライアントに、機能JSONP実行形式を構築するには、クライアント機能クロスドメインshowDataを実行します
 
 //21.5.3彗星

 // https://www.iteye.com/blog/raising-2271869は、例を参照してください



 //21.5.4サーバーイベントを送信します

 EventSource新しい新しいSource = VAR( 'URL'); 
 source.open(); 
 source.onmessage =機能(イベント){ 
     VARデータ= event.data; 
 }; 
 source.close(); 


 //ウェブソケット21.5.5 

 VARソケット=新しいのWebSocket(「WS://www.example.com/server.php 」); 
 のWebSocketオブジェクトがインスタンス化された後//、ブラウザがすぐにリンクを確立しようとしますが、現在の状態の代表も存在するのWebSocket 
 // readyStateの特性は、値は(0)リンクを確立することであるWebSocket.OPENINGた
 リンク確立している)//WebSocket.OPEN(1を
 閉じたリンクである)//WebSocket.CLOSEING(2を
 接続閉じた)//WebSocket.CLOSE(3 

 '(socket.sendを世界のHello ');! 
 VARメッセージ= { 
     時間:新しい新しいDate()、 
 socket.send(JSON.stringify(メッセージ)); 
 //サーバからメッセージを受信します 
     テキスト: "!Hello World"の、
     clientId: 'asdfp8734rew' 
 }; 
 socket.onmessage =関数(イベント){ 
     VARデータ= event.data; 
     //処理ロジック
 }; 
 
 socket.onopen =関数(イベント){ 

 }; 
 socket.onerror =関数(イベント){ 

 } ; 
 socket.onclose =関数(イベント){ 
     //イベント三つの特定OnCloseの
     閉じたかどうかを示す//event.wasClean(boolean値)
     // event.code(サーバによって返された数値ステータスコード)
     // event.reason (サーバによって返されたメッセージ)
 }

  

おすすめ

転載: www.cnblogs.com/ms_senda/p/11520183.html