フロントエンド開発学習【AJAX】

1。概要

1.アヤックス

AJAX の正式名称は、Asynchronous Javascript And XML (非同期 JS および XML) です。AJAXを介してブラウザ上で非同期リクエストを送信できるため、更新せずにデータを取得できることが最大のメリットです。

アドバンテージ:

  • ページを更新せずにサーバーと通信できます。
  • ユーザー イベントに基づいてページ コンテンツの一部を更新できます。

欠点:

  • 閲覧履歴やロールバックはありません。
  • クロスドメインの問題があります。
  • SEO は優しくありません (検索エンジンの最適化、クローラーがクロールできません)。

2.XML

データの送信と保存に使用される XML 拡張マークアップ言語。XML は HTML に似ていますが、HTML には事前定義されたタグがあるのに対し、XML はカスタム タグです。現在は JSON に置き換えられています。

3. クロスドメインの問題

クロスドメインとは、ブラウザーが他の Web サイトからのスクリプトを実行できないことを意味します。これはブラウザの同一生成元ポリシー (ブラウザによって課されるセキュリティ制限) が原因で発生します。

いわゆる同一オリジンとは、ドメイン名、プロトコル、ポートがすべて同じであることを意味し、1 つだけ異なる場合はクロスドメインです。localhost と 127.0.0.1 はどちらもローカル マシンを指しますが、クロスドメインでもあります。

クロスドメインはインターフェースのリクエストと Dom の操作をブロックします。

4.HTTPプロトコル

HTTP (hypetext Transport Protocol) プロトコル、ハイパーテキスト転送プロトコルは、ブラウザと World Wide Web サーバー間の相互通信のルールを規定します。

リクエストメッセージ

  • 行: リクエストメソッド、URL パス、HTTP プロトコルのバージョン
  • 头:ホスト、Cookie、コンテンツタイプ、ユーザーエージェント
  • 空行

応答メッセージ

  • 行:プロトコルバージョン、応答ステータスコード、応答ステータス文字列
  • 头:コンテンツタイプ、コンテンツ長、コンテンツエンコーディング
  • 空行
  • 本文:HTMLソースコード

5. 環境の準備

Node.js をダウンロードして Express:ハウツー リンク

2.使用する

1. 基本操作のリクエスト

//获取元素
const btn=document.getElementByTagName('button')[0];
//绑定事件
btn.onclick=function(){
    
    
	//1.创建对象
	const xhr=new XMLHttpRequest();
	//2.初始化 设置请求方法和url
	xhr.open('GET','http://127.0.0.1:8000/路径');
	//3.发送
	xhr.send();
	//4.事件绑定 处理服务器端返回结果
	//readystate 是xhr对象中的属性,表示状态0 1 2 3 4
	//0 未初始化 1 open调用完毕 2 send调用完毕 3 服务器返回部分结果 4 返回所有结果
	xhr.onreadystatechange=function(){
    
    
		if(xhr.readystate===4){
    
    
			if(xhr.status>=200&&xhr.status<300){
    
    
				result.innerHTML=xhr.response;
			}
		}
	}
}

2.パラメータの設定

URLの間に設定します。

3. POSTリクエストを送信する

xhr.open('POST','http://127.0.0.1:8000/路径+参数');
//设置请求头
xhr.setRequestHeader('type','content');
//设置请求体
xhr.send('请求体');

4. JSONデータに応答する

サーバーは以下を送信します:

const data={
    
    name:'hh'};
let str=JSON.stringify(data);
response.send(str);

クライアントは以下を受け取ります:

//手动转换
let data=JSON.parse(xhr.response);
console.log(data.name);
//自动转换
console.log(xhr.response.name);

5. リクエストタイムアウトの問題

//1. 2s内未收到结果就取消
xhr.timeout=2000;
//2. 设置超时回调,超时后调用该函数
xhr.ontimeout=function(){
    
    }

//网络异常回调
xhr.onerror=function(){
    
    }

6. キャンセルリクエスト

xhr.abort();

7. 質問の再送信リクエスト

//标识是否正在发送ajax请求
let isSending=false;

//发送后将isSending 改为true

//绑定事件
xhr.onreadystatechange=function(){
    
    
	if(xhr.readyState===4){
    
    
		isSending=false;
	}		
}

8. fetch 関数を使用して ajax リクエストを送信します

fetch('url',{
    
    
	method:'POST',
	//请求头
	headers:{
    
    
		name:'ahh'
	},
	//请求体
	body:''
}).then(response=>{
    
    
	return response.text();//response.json();
});

3. jQuery での ajax の使用

1.リクエストを取得する

$.get(url,[data],[callback],[type])

  • url: リクエストされた URL アドレス
  • データ: 伝送されるパラメータ
  • callback: ロード成功時のコールバック関数
  • type: 返されるコンテンツ形式を設定します

2.投稿リクエスト

$.post(url,[data],[callback],[type])

  • url: リクエストされた URL アドレス
  • データ: 伝送されるパラメータ
  • callback: ロード成功時のコールバック関数
  • type: 返されるコンテンツ形式を設定します

3. 一般モード

$('button').eq(0).click(function(){
    
    
	$.ajax({
    
    
		url:'',
		data:{
    
    a:100,b:200},
		type:'GET'  //'POST',
		dataType:'json',
		success:function(data){
    
    },
		timeout:2000,
		error:function(){
    
    }
	})
})

4. Axios は ajax を使用します

5. クロスドメインの問題

1. 同一生成元ポリシー

ブラウザーのセキュリティ ポリシー、同一オリジン: プロトコル、ドメイン名、およびポート番号がまったく同じである必要があります。

同一オリジンポリシーの違反はクロスドメインです。

2. クロスドメインの解決方法

  1. JSONP : GET リクエストのみがサポートされます。

img、link、iframe、script などの一部のタグにはクロスドメイン機能があり、JSONP は script タグのクロスドメイン機能を使用してリクエストを送信します。
スクリプト送信リクエストはjs ステートメントを返す必要があります。

jQuery は jsonp リクエストを送信します

$('button').eq(0).click(function(){
    
    
	$.getJSON('url',function(data){
    
    })
})
  1. CORS: クロスオリジンリソース共有

クライアント側で特別な操作を行う必要はなく、サーバー内で完全に処理され、get リクエストと post リクエストがサポートされます。

CORS は、応答ヘッダーを設定することで、リクエストでクロスオリジンが許可されていることをブラウザーに伝えます。

response.setHeader("Access-Control-Allow-Origin","*");
response.setHeader("Access-Control-Allow-Header","*");
response.setHeader("Access-Control-Allow-Method","*");
//*:全部
// 也可以写一个具体的url地址。

おすすめ

転載: blog.csdn.net/qq_46056318/article/details/127382926