ก่อนอื่นมาเตรียมการกันเถอะ มิฉะนั้นถ้าคุณเข้าใจสิ่งที่ฉันหมายถึงคนอื่นไม่เข้าใจ แม้ว่าคนอื่นจะเข้าใจ แต่ก็จะมีคนที่ไม่เข้าใจเสมอ จากนั้นคุณต้องพูด สิ่งที่ฉันหมายถึงคือคำอธิบายนี้จะต้องทำ คำตอบคือต้อง เพื่อให้ทุกคนเข้าใจง่ายขึ้น
เราสามารถแสดงให้เห็นถึงปัญหาข้ามโดเมนโดยใช้ชื่อโดเมนหลักสองชื่อหรือหนึ่งชื่อโดเมนหลัก + ชื่อโดเมนระดับสองเป็นตัวอย่าง
ลูกค้า A.com
เซิร์ฟเวอร์ B.Com หรือ sacom
AngularJS เวอร์ชัน v1.2.25
การเตรียมการทำได้ดีมากและเราเกือบจะเปิดเผยถึงบรรณาธิการของเราในฐานะ Subline ฉันจะไม่บอกเขาคนธรรมดาคนนี้
มีคนตะโกนว่าคำถามนี้มีมานานแล้ว ตอนนี้ถามอะไร? เป็นไปได้ไหมที่คุณยังสามารถหลอกดอกไม้ได้? ฉันสามารถเขียนดอกไม้ได้จริงๆ มาดูการแสดงสิ่งที่เราจะแสดงในบทความนี้เป็นตัวอย่างที่สมบูรณ์แบบโดเมน
ถัดไปมาดูกันว่าลูกค้าร้องขอข้อมูลอย่างไร
หมายเหตุรหัสของเราเขียนภายใต้ชื่อโดเมน A.COM
<! doctype html> <html lang = "en" ng-app = "แอป"> <head> <meta charset = "utf-8"> <title> </title> <script src = "./ angular.min.js"> </script> <script type = "text/javascript" []); app.controller ('appctrl', ['$ scope', ฟังก์ชั่น ($ scope) {$ http ({วิธี: 'jsonp', url: 'http://www.b.com/test.php?callback=json_callback' $ http.jsonp ('http://www.b.com/test.php?callback=json_callback') .success (ฟังก์ชั่น (msg) {console.log (msg);});เราเห็นว่านี่เป็นคำขอข้ามโดเมนโดยตรงในรูปแบบของ JSONP และการดำเนินการของมันนั้นเหมือนกับวิธีการขอข้ามโดเมนใน jQuery โปรดทราบว่าการโทรกลับของเราได้รับการแก้ไขนั่นคือ json_callback พยายามอย่าทำการเปลี่ยนแปลงใด ๆ
ลองดูที่วิธีทดสอบ. php จัดการข้อมูลที่ร้องขอในเซิร์ฟเวอร์ B.Com ที่นี่เราใช้วิธี PHP ดั้งเดิมเป็นข้อมูลอ้างอิง
$ callback = isset ($ _ get ['callback'])? $ _get ['callback']: default_callback; ออก ($ callback. '('. json_encode ($ data) ')');ลองกลับไปดูผลลัพธ์ของคอนโซลไคลเอ็นต์บันทึกบันทึก
ณ จุดนี้เราได้ขอความสำเร็จในโดเมนแล้ว!
สุดท้ายให้สรุปเล็กน้อยและให้ความสนใจกับประเด็นสำคัญ:
1. พารามิเตอร์ที่เพิ่มหลังจาก URL ที่ลูกค้าร้องขอข้ามโดเมนคือ? callback = json_callback ค่าของการโทรกลับพารามิเตอร์ถูกระบุเป็น JSON_CALLBACK โปรดทราบว่ามันเป็นตัวพิมพ์ใหญ่นั่นคือ JSON_CALLBACK ไม่ได้ทำการเปลี่ยนแปลงใด ๆ รู้สึกว่านี่เป็นหลุมใหญ่ หากค่าของการโทรกลับมีการเปลี่ยนแปลงเล็กน้อยลูกค้าจำเป็นต้องกำหนดฟังก์ชั่นการโทรกลับทั่วโลกและฉันจะส่งผ่านไปยัง $ ขอบเขตสำหรับการประมวลผลได้อย่างไร เพื่อหลีกเลี่ยงปัญหาที่ไม่จำเป็นนี่คือความหมายของการทำ
2. ดูเซิร์ฟเวอร์อีกครั้ง เซิร์ฟเวอร์จำเป็นต้องระบุ $ callback = $ _get ['callback']; รับการโทรกลับและคุณจะพบว่าการโทรกลับที่ได้รับไม่ใช่ค่าของการโทรกลับที่ลูกค้าของเราเขียน ไคลเอนต์ระบุ JSON_CALLBACK เพื่อเรียกใช้กลไกภายในของ AngularJS