JavaScript – Fetch API

Get Method (Default)

//以下是GET Method(Default 是GET) 其他的有 POST,PUT,DELETE,HEAD
fetch('url').then((response) => {    //response的屬性有 "ok"成功時true,不成功false  status,成功為200, statusText成功為ok...
    //回傳json, 如果是text 就改為.text()
    response.json().then(data => {
       console.log(data);
    });
}).catch(err){
     console.error(err);
}

Get 以外的Method

fetch('url', {
   method:"POST",
   body: JSON.stringify({ name: "elvis", age: "18" })       //前面可再加上 encodeURI() 做轉碼,防止傳送中文時出現亂碼, POST,PUT,DELETE時必需
}).then((response) => {
    return response.json(); //再return 會回傳到下面的then
}).then(result => {   //這裡接收上面的回傳
    console.log(result);   
});

搭配async, await, promise.all 使用

const postURL = (name,age) => {
   return fetch('url', {
      method:"POST",
      body: JSON.stringify({ name: "elvis", age: "18" })       //前面可再加上 encodeURI() 做轉碼,防止傳送中文時出現亂碼, POST,PUT,DELETE時必需
   }).then((response) => {
       return response.json(); //再return 會回傳到下面的then
   }).then(result => {   //這裡接收上面的回傳
       console.log(result);   
   });
}
postURL('elvis',18);
console.log("test");
postURL('noah',19);
//輸出會是:
test
{name:"elvis", age:18}
{name:"noah", age:19}

可以成改await,async 寫法 使能控制執行順序

~async function(){   //直接執行的寫法
   const postURL = (name,age) => {
      return fetch('url', {
         method:"POST",
         body: JSON.stringify({ name: "elvis", age: "18" })       //前面可再加上 encodeURI() 做轉碼,防止傳送中文時出現亂碼, POST,PUT,DELETE時必需
      }).then((response) => {
          return response.json(); //再return 會回傳到下面的then
      }).then(result => {   //這裡接收上面的回傳
          console.log(result);   
      });
   }
   await postURL('elvis',18);
   console.log("test");
   await postURL('noah',19);
}();
//輸出會是:
{name:"elvis", age:18}
test
{name:"noah", age:19}
// 或者以下方法
async function delayFunction(){
    let response = await fetch('url');
    await response.json().then(data => {
      console.log(data);
   }).catch(err => {
      console.error(err);
   });
   console.log('done');
};
//正常的輸出次序為
//1. console.log(data);
//2. console.log('done');

PHP 接收方

<?php
$data = json_decode(file_get_contents('php://input'), true);

$name = $data["name"];
$age = $data["age"];

$return = "你所輸入的名稱為 $name, 歲數為 $age";

echo json_encode($return);

?>

JavaScript – 透過 FormData 傳送

let formData = new FormData();

formData.append("name", "elvis");
formData.append("age", "18");

let photo = document.querySelector("#your_input_element").files[0];

formData.append("photo", photo);

fetch(url, {
  'method':'post',
  'Content-Type': 'multipart/form-data',
   //如果FormData 包括了檔案的傳送則需使用
   //'Content-Type': 'multipart/form-data; boundary=—-WebKitFormBoundaryfgtsKTYLsT7PNUVD'
  body: formData,
}).then((response) => {
  return response.json(); //視乎Server的回傳格式, 文字請改為 text()
}).then(
  result => {
    console.log(result);
  }
).catch(
  error => console.log("錯誤:", error);
)

PHP – 接收FormData

<?php

$name = $_POST['name'];
$age = $_POST['age'];
$photo = $_FILES["photo"];

$upload_path = "photo/";
$file_name = basename($_FILES["photo"]["name"]);

$return = "你所輸入的名稱為 $name, 歲數為 $age";

if(move_uploaded_file($_FILES["photo"]["tmp_name"], $upload_path . $file_name)){

  $return .= "並上載成功";
}
else{
  $return .= "但上載失敗";
  //有可能是權限不足導致上載不成功
}

echo json_encode($return);


?>

開始在上面輸入您的搜索詞,然後按回車進行搜索。按ESC取消。

返回頂部