Ajaxを使用して非同期リクエストを実現する

アヤックス

1.コース紹介
     静的なWebサイトと動的なWebサイトは同期されますが、同期方法には欠点があります。ページリクエストの応答がブロックされ、ユーザーエクスペリエンスに影響します
     この問題を解決するために、ページ(非表示のフレーム)の部分的な更新を柔軟な方法で行うことができます。非表示のフレームは不便なので、Ajaxがあります。
 
2.部分更新のための隠しフレーム

<form action = " ./11inner.php " method = " post " target = " abc " >用户名 <input type = " text " name = " username " > 
         密码: <input type = " password " name = " パスワード" > 
        <input type = " submit " value = " 提交" > 
    </ form> 
    <iframe src = "" width = "200 " height = " 200 " frameborder = " 2 " name = " abc " > </ iframe> 
 
Code in PHP
 
 <?Php 
    $ uname = $ _POST [ ' username ' ]; 
    $ pw = $ _POST [ ' password ' ] ;
     if($ uname == ' 111 ' && $ pw == ' 111 ' ){
         // jsの親は親ページ 
        echoを意味します'<script> parent.document.getElementById( "dv")。innerHTML = "Login successful" </ script> ' ; 
    } 
    else { 
        echo ' <script> parent.document.getElementById( "dv")。innerHTML = "Usernameまたはパスワードが間違っています "</ script> ' ; 
    }
 
 ?>
3.リクエストに対するAjax応答を実装する方法
基本的な手順:XMLHttpRequestオブジェクトの作成->送信パラメーターの構成->送信の実行->プロセス応答
 1 、XHRオブジェクト作成
     VAR XHR = NULL ;
     IF (window.XMLHttpRequest){ 
        標準ブラウザ
        XHR = 新しい新規のXMLHttpRequestを(); 
    } { 
        非標準ブラウザIE6 / 7 / 8 
        XHR = 新しい新しい ActiveXObjectの(' Microsoft.XMLHTTP ' ) ; 
    } 
    readyState == 0は、xhrオブジェクトの初期化が完了したことを意味します
    console.log(xhr.readyState + ' --------- 1 ---------- ' );
 2. 送信パラメーターvarを設定します
    type = ' get ' ;
     var myurl = ' ./data.php ' ;
     var  async = false ; // 3番目のパラメーターデフォルト値はtrueで、非同期を意味します; falseは同期を意味します 
    xhr.open(type、myurl、async );
  図3は、送信
     VAR PARAM = NULL ; 
    xhr.send(PARAM)
    のreadyState == 1は、要求が発行されたことを示し
  
 
 4 、プロセス応答は、次の呼び出しに私たち自身のコールバック関数ではなく、自動的にブラウザによって呼び出される(コールバック関数を指定する)
     のでブラウザはいつ呼び出されますか?xhr.readyState(01234)この状態値が変更されたら、
     xhr.onreadystatechange = function(){
        if(xhr.status == 200 ){
          if(xhr.readyState == 4 ){ 
                サーバーの応答データを取得
            var result = xhr.responseText; 
          } 
       } 
 } 
    同期リクエストの場合、コールバック関数を使用する必要はありません。xhr.responseTextconsole.log 
    (xhr.responseText);を介して直接データを取得できます
4.応答でステータスを処理します  (xhr.status == 200)
xhr.statusはhttpプロトコルのステータスコードです:200成功、404リソースが見つかりません、500サーバーエラー
 
5.処理応答のreadyStateは状態値(0、1、2、3、4)です。
readyState == 0は、xhrオブジェクトの初期化が完了したことを示します
readyState == 1は、リクエストが発行されたことを意味します
readyState == 2は、サーバー側のデータが完全に返されたことを示します
readyState == 3は、データが解析されていることを意味します
readyState == 4は、データ分析が完了し、使用できることを意味します
 
6.注意が必要な事項:
    1、xhrオブジェクトの作成には互換性のある処理が必要
    2. xhr.openの3つのパラメーターの役割
    3.理解するxhr.readyState状態値
    4. xhr.responseTextを介してサーバー応答データを取得します
    5. getリクエストの場合、xhr.send()のパラメータはnullに固定されています
    6. xhr.statusとxhr.readyStateの役割と違い
 
 
7.フォームの送信を防ぐいくつかの方法
     1. falseを返す。
     2.e.preventDefault();
     3. <input type = "submit" value = "提交" id = "btn">把「送信」换成「ボタン」
 
8.フォームを手動で送信します
     form.submit();
 
 
9. Ajax-getの送信
Ajaのget送信データは、URLを介してパラメーターを渡すことであり、パラメーターをエンコードする必要があります
xhr.send();メソッドパラメータはnullに固定されています
2.送信機能を構成する
            encodeURI関数は、文字化けを防ぐためにgetパラメーターをエンコードします。
            var param = encodeURI( '?username =' + uname + '&password =' + pw);
            xhr.open( 'get'、 '。/ data.php' + param);
3.送信
            xhr.send(null);
10. Ajaxポストの送信
 
Ajaxの投稿送信メソッドはxhr.send()を使用します。
関数によって渡されるパラメーターは、URLを介してデータを渡す代わりにデータを送信します
投稿送信メソッドはリクエストヘッダーを設定する必要があります
投稿されたデータはエンコードする必要はありません
 2.送信機能を構成する
               xhr.open( 'post'、 '。/ 33data.php');
               //リクエストヘッダー情報を設定します(投稿ヘッダーにはリクエストヘッダーを設定する必要があります)
               xhr.setRequestHeader( 'Content-Type'、 'application / x-www-form-urlencode');
3.送信
               var param = 'username =' + uname + '&password =' + pw;
               xhr.send(param);
11. postとgetの違い

 

取得する 役職
2.送信機能を構成する
            encodeURI関数は、文字化けを防ぐためにgetパラメーターをエンコードします。
            var param = encodeURI( '?username =' + uname + '&password =' + pw);
            xhr.open( 'get'、 '。/ data.php' + param);
3.送信
            xhr.send(null);
2.送信機能を構成する
               xhr.open( 'post'、 '。/ 33data.php');
              リクエストヘッダー情報を設定します(投稿を送信するにはリクエストヘッダーを設定する必要があります)
               xhr.setRequestHeader( 'Content-Type'、 'application / x-www-form-urlencoded');
3.送信
               var param = 'username =' + uname + '&password =' + pw;
               xhr.send(param);
 
1. Ajaのget送信データには、URLを通じてパラメーターが渡され、パラメーターをエンコードする必要があります
2. xhr.send();メソッドパラメータはnullに固定されています
1. Ajaxの投稿送信メソッドはxhr.send()を使用します。
関数によって渡されるパラメーターは、URLを介してデータを渡す代わりにデータを送信します
2.投稿送信メソッドはリクエストヘッダーを設定する必要があります(xhr.setRequestHeader( 'Content-Type'、 'application / x-www-form-urlencode');)
3.投稿で送信されたデータはエンコードする必要はありません
12. URLの標準形式
 
http://www.baidu.com/a/ac/b?flag = 123#abc scheme:// host:port / path?query#fragment
http ---- scheme スキーム:通信プロトコルhttp https ftp
www.baidu.com ---ホスト ホスト:ドメイン名またはIPアドレス
非表示のhttpのデフォルトポートは80です---ポート ポート:ポートブラウザは非表示です
a / ac / b ---パス パス:パス、ポートと疑問符の間の部分
#abcの後ろ----フラグメント フラグメント:アンカーハッシュ(ハッシュ)、役割:ページ上の特定の位置を見つける


13.encodeURICompontent()和encodeURI()
     encodeURIComponent()メソッドは、URL内の特殊文字をエンコードできます
     encodeURI()メソッドは特殊文字を変換しません
     
   var url = 'http://www.sina.com';
     var str = 'http://www.baidu.com?username=张三&flag =' + encodeURIComponent( ':// ??:');
    console.log(encodeURI(str));
     console.log(encodeURIComponent(str));

14.サーバーから返されたXMLデータを解析しますvar result = xhr.responseXML;
15.サーバーから返されたjsonデータを解析しますvar result = xhr.responseText;
14&15
サーバーから返されたxmlデータを解析します
var result = xhr.responseXML;
サーバーから返されたJSONデータを解析します
var result = xhr.responseText;
xmlデータ形式の欠点:
1.メタデータ(データを説明するデータ):メタデータはより多くのスペースを必要とし、ネットワーク伝送に役立ちません
2.解析が不便
jsonデータ形式
1.データはキーと値のペアで構成されます
2.キーと値は二重引用符で囲む必要があります
3.値のタイプは次のいずれかです。数値文字列配列オブジェクト
 
json_encode();メソッドの役割:配列をjson文字列に変換する
$ str = json_encode($ arr);
 
JSON.parse();関数:文字列をオブジェクトに変換します
var str = '{"username":"lisi","age":"12"}';
var obj = JSON.parse(str);
var obj = eval('('+str+')');//也可以实现
 
eval方法的作用就是把符合js语法 的字符串转成代码并执行
eval('console.log(111)');//输出111
 
 if(xhr.status == 200 && xhr.readyState == 4){
 xml数据格式
                     var ret = xhr.responseXML;
                    var books = ret.getElementsByTagName('book');
                    var tag = '';
                    for (var i = 0; i < books.length; i++) {
                        var book = books[i];
                        var name = book.getElementsByTagName('name')[0].innerHTML;
                        var author = book.getElementsByTagName('author')[0].innerHTML;
                        var price = book.getElementsByTagName('price')[0].innerHTML;
                        var desc = book.getElementsByTagName('desc')[0].innerHTML;
                        tag += '<ul><li>'+name+'</li><li>'+author+'</li><li>'+price+'</li><li>'+desc+'</li></ul>';
                    }
                    var container = document.getElementById('container');
                    container.innerHTML = tag;
          }
 if(xhr.status == 200 && xhr.readyState == 4){
                    // 原生Ajax从服务器获取的原始数据是字符串(有可能是json格式的字符串)
                     var result = xhr.responseText;
                    // JSON.parse()的作用就是把json形式的字符串转化成对象
                     result = JSON.parse(result);
                    console.log(result);
                    var tag = '';
                    for (var i = 0; i < result.length; i++) {
                        var book = result[i];
                        tag += '<ul><li>'+book.name+'</li><li>'+book.author+'</li><li>'+book.price+'</li><li>'+book.desc+'</li></ul>'
                    }
                    var container = document.getElementById('container');
                    container.innerHTML = tag;
                }
<?php 
    header('Content-Type:application/xml; charset=utf-8');
  
?>
<?xml version='1.0' encoding='utf-8' ?>
 
<booklist>
    <book>
        <name>三国演义</name>
        <author>罗贯中</author>
        <price>20</price>
        <desc>一个杀伐纷争的年代</desc>
    </book>
</booklist>
<?php
    $arr = array(   

  array('name'=>'三国演义','author'=>'罗贯中','price'=>'20','desc'=>'一个杀伐纷争的年代'),
  array('name'=>'红楼梦','author'=>'曹雪芹','price'=>'30','desc'=>'封建社会家族的缩影'),
  array('name'=>'水浒传','author'=>'施耐庵','price'=>'40','desc'=>'一群土匪的故事'),
  array('name'=>'西游记','author'=>'吴承恩','price'=>'50','desc'=>'四个男人和一匹马的故事')

    );
 
    json_encode()方法的作用:把数组转化成json字符串
    $str = json_encode($arr);
    echo $str;
 
 print_r($arr);//也可以实现
 
 ?>
 
 
 

おすすめ

転載: www.cnblogs.com/smedas/p/12689211.html