トップへ(mam-mam.net/)

コピペで使えるXMLHttpRequestやfetchで非同期通信(ajax)

非同期通信を行うとURLを変更することなく他のURLを呼び出して通信し、結果を表示することが出来ます。

XMLHttpRequestを使った非同期通信GET

<input type="button" id="btn_XMLHttpRequest" value="XMLHttpRequestを使った非同期通信">
<div id="info"></div>
<script>
window.addEventListener("load",function(){
  //XMLHttpRequestを使った非同期通信
  document.getElementById("btn_XMLHttpRequest").addEventListener("click", async function () {
    let xhr=new XMLHttpRequest();
    xhr.onload=function(e){
      //readyState:4(通信完了) status:200(リクエスト成功)
      if(xhr.readyState==4 && xhr.status==200){
        // レスポンスで返ってきたデータをjson形式で取り出す
        let json = JSON.parse(xhr.response);
        document.getElementById("info").innerHTML=
          "XMLHttpRequest使用:" + xhr.response + "<br>json[\"a\"]=" + json["a"];
      }
    }
    xhr.open("GET","./js_ajax.php?a=GET(XMLHttpRequest)",true);
    xhr.responseType="text";
    xhr.send();
  });
});
</script>

fetchを使った非同期通信GET(IE不可)

<input type="button" id="btn_fetch" value="fetchを使った非同期通信(IE不可)">
<div id="info_fetch"></div>
<script>
window.addEventListener("load",function(){
  //fetchを使ったGet非同期通信(IE不可)
  document.getElementById("btn_fetch").addEventListener("click", async function () {
    const res = await fetch("./js_ajax.php?a=GET(fetch)");
    if(res.status==200){
      console.log(res);
      // レスポンスで返ってきたデータをtext形式で取り出す場合
      //let text= await res.text();
      //document.getElementById("info_fetch").innerHTML=text;

      // レスポンスで返ってきたデータをjson形式で取り出す
      let json = await res.json();
      document.getElementById("info_fetch").innerHTML=
        "fetch使用:" + JSON.stringify(json) + "<br>json[\"a\"]=" + json["a"];
    }
  });
});
</script>

fetchを使った非同期通信POST(IE不可)

<input type="button" id="btn_fetch_post" value="fetchを使った非同期通信(IE不可)">
<div id="info_fetch_post"></div>
<script>
window.addEventListener("load",function(){
  //fetchを使ったPost非同期通信(IE不可)
  document.getElementById("btn_fetch_post").addEventListener("click", async function () {
    var data="a=Post(fetch)";  //送信するデータ
    const res = await fetch(
      "./js_ajax.php",
      {
        method: 'POST',
        //mode: 'no-cors',             //CORSを許可しない
        //cache: 'no-cache',           //キャッシュしない
        //credentials: 'same-origin',  //同一オリジンのリクエストに対してのみ資格情報を送信
        headers: {
           'Content-Type': 'application/x-www-form-urlencoded',
        },
        //redirect: 'follow',
        //referrerPolicy: 'no-referrer',
        body: data
      }
    );
    if(res.status==200){
      // レスポンスで返ってきたデータをtext形式で取り出す場合
      //let text= await res.text();
      //document.getElementById("info_fetch_post").innerHTML=text;

      // レスポンスで返ってきたデータをjson形式で取り出す
      let json=await res.json()
      document.getElementById("info_fetch_post").innerHTML=
        "fetch使用(POST):" + JSON.stringify(json) + "<br>json[\"a\"]=" + json["a"];
    }
  });
});
</script>

fetchを使った非同期通信application/jsonのPOST(IE不可)

<input type="button" id="btn_fetch_json_post" value="fetchを使った非同期通信(IE不可)">
<div id="info_fetch_json_post"></div>
<script>
window.addEventListener("load",function(){
  //fetchを使ったjsonのPost非同期通信(IE不可)
  document.getElementById("btn_fetch_json_post").addEventListener("click", async function () {
    var data={"a":"json Post(fetch)"};  //送信するデータ
    const res = await fetch(
      "./js_ajax.php",
      {
        method: 'POST',
        //mode: 'no-cors',
        //cache: 'no-cache',
        //credentials: 'same-origin',
        headers: {
           'Accept': 'application/json',
           'Content-Type': 'application/json',
        },
        //redirect: 'follow',
        //referrerPolicy: 'no-referrer',
        body: JSON.stringify(data)
      }
    );
    if(res.status==200){
      // レスポンスで返ってきたデータをtext形式で取り出す場合
      //let text= await res.text();
      //document.getElementById("info_fetch_json_post").innerHTML=text;

      // レスポンスで返ってきたデータをjson形式で取り出す
      let json=await res.json()
      document.getElementById("info_fetch_json_post").innerHTML=
        "fetch使用(json_POST):" + JSON.stringify(json) + "<br>json[\"a\"]=" + json["a"];
    }
  });
});
</script>