ค้นหาเว็บไซต์

javascript - เกิดข้อผิดพลาดในการดึงข้อมูลเมื่อใช้ fetch API ในสคริปต์ Office


ฉันกำลังพยายามรันคำขอแบบ POST จาก Office Scripts บน API แต่ทุกครั้งที่ฉันเพิ่ม : "Content-type": "application/json" ลงใน header จะได้รับข้อผิดพลาด failed to fetch เสมอ แต่เมื่อฉันลบตัวเลือก content-type หรือเปลี่ยนค่าของมันเป็นอย่างอื่นที่ไม่ใช่ "application/json" คำขอ fetch ก็ทำงานได้ แต่จะส่งกลับข้อผิดพลาดรหัส 0 และข้อความข้อผิดพลาดการตรวจสอบความถูกต้องที่ระบุว่า userName และ password ('ซึ่งได้กำหนดค่าใน body แล้ว ไม่พบ') ด้านล่างคือตัวอย่างโค้ด

    async function main(workbook: ExcelScript.Workbook) {

    const param = {
      method: "POST",
      headers: {
        //"Content-type": "application/json"
      },
      body: JSON.stringify({ user_id: "uname", password: "pwd"})
   
    };

  await fetch("https://testAPI/login/", param).then(response => response.json())
    .then(data => console.log(data));
  }

เกิดข้อผิดพลาดเมื่อฉันรันโค้ดนี้โดยตั้งค่า header เป็น Content-Type เป็น 'application/json' (บรรทัดที่ 33 มีคำสั่ง fetch):

บรรทัด 33: ดึงข้อมูลไม่สำเร็จ

เกิดข้อผิดพลาดเมื่อฉันรันโค้ดนี้โดยตั้งค่า content-Type เป็น 'text/plain', ตัวเลือกอื่น ๆ หรือการลบคุณสมบัติ content-type ออกจาก header โดยสมบูรณ์ :

นอกจากนี้ คำขอเดียวกันนี้จาก Postman หรือ Power Automate โดยมี header content-type ตั้งค่าเป็น 'application/json' ทำงานได้สำเร็จ ปัญหาจะเกิดขึ้นเฉพาะใน Office Script

คำตอบ #1

ปัญหาอาจเกี่ยวข้องกับ CORS ฉันต้องรวมส่วนหัว CORS บน API endpoint ที่ฉันพยายามเข้าถึง นี่อาจเป็นปัญหาเนื่องจากคุณบอกว่า รหัสสถานะ ของการตอบกลับคือ 0 ทำไม fetch ถึงส่งกลับการตอบกลับที่มีสถานะ=0?

ฉันได้เพิ่มหัวข้อดังต่อไปนี้ลงในเส้นทาง API:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-For

นี่คือโค้ด OfficeScript ของฉันสำหรับอ้างอิง:

const response = await fetch(url, {
    method: 'POST',
    body: JSON.stringify(cellData),
    headers: {
        'Content-Type': 'application/json'
    }
})

บทความที่เกี่ยวข้อง