Pertama, mari kita buat beberapa persiapan. Jika tidak, jika Anda mengerti apa yang saya maksud, orang lain tidak mengerti. Bahkan jika orang lain mengerti, maka akan selalu ada orang yang tidak mengerti. Maka Anda harus mengatakannya. Yang saya maksud adalah bahwa penjelasan ini harus dilakukan. Jawabannya adalah suatu keharusan. Untuk memudahkan semua orang untuk dipahami.
Kita dapat menunjukkan masalah lintas domain dengan mengambil dua nama domain utama atau satu nama domain utama + satu nama domain tingkat kedua sebagai contoh.
Klien A.com
Server b.com atau sacom
Versi AngularJS V1.2.25
Persiapan dilakukan dengan sangat baik, dan kami hampir mengekspos editor kami sebagai subline. Saya tidak akan memberitahunya orang biasa ini.
Seseorang telah berteriak bahwa pertanyaan ini sudah ada sejak lama. Apa gunanya menanyakannya sekarang? Mungkinkah Anda masih bisa membodohi bunganya? Yah, saya benar -benar bisa menulis bunga terbuka. Mari kita tonton pertunjukannya, apa yang akan kita lakukan di artikel ini adalah contoh lintas domain yang lengkap.
Selanjutnya, mari kita lihat bagaimana klien meminta data
Catatan, kode kami ditulis dengan nama domain A.com
<! Doctype html> <html lang = "en" ng-app = "app"> <head> <meta charset = "utf-8"> <itement> </iteme> <script src = "./ angular.min.js"> </script> <script = "teks/teks/javascript"> var appule.moD. []); app.controller ('appctrl', ['$ scope', function ($ scope) {$ http ({Method: 'jsonp', url: 'http://www.b.com/test.php?callback=json_callback',bww. $ http.jsonp ('http://www.b.com/test.php?callback=json_callback') .success (function (msg) {console.log (msg);});Kami melihat bahwa ini adalah permintaan domain silang secara langsung dalam bentuk JSONP, dan operasinya persis sama dengan metode permintaan lintas domain di jQuery. Perhatikan bahwa panggilan balik kami sudah diperbaiki, yaitu, json_callback, cobalah untuk tidak membuat perubahan apapun
Mari kita lihat cara test.php menangani data yang diminta di server b.com. Di sini kami menggunakan metode PHP asli sebagai referensi.
$ callback = isset ($ _ dapatkan ['callback'])? $ _Get ['callback']: default_callback; keluar ($ callback. '('. json_encode ($ data). ')');Mari kita lihat kembali hasil Console.log Record klien
Pada titik ini, kami telah berhasil meminta di seluruh domain!
Akhirnya, mari kita buat ringkasan kecil dan perhatikan poin -poin penting:
1. Parameter yang ditambahkan setelah URL yang diminta oleh klien di seluruh domain adalah? Callback = json_callback. Nilai panggilan balik parameter ditentukan sebagai json_callback. Perhatikan bahwa itu dikapitalisasi, yaitu, JSON_CALLBACK, tidak membuat perubahan. Rasanya seperti ini adalah lubang besar. Jika nilai panggilan balik sedikit berubah, klien perlu menentukan fungsi callback secara global, dan bagaimana saya bisa meneruskannya ke $ ruang lingkup untuk diproses? Untuk menghindari masalah yang tidak perlu, inilah artinya dilakukan
2. Lihatlah server lagi. Server perlu menentukan $ callback = $ _get ['callback']; Terima panggilan balik, dan Anda juga akan menemukan bahwa panggilan balik yang diterima bukanlah nilai panggilan balik yang ditulis oleh klien kami. Klien menentukan json_callback untuk memicu mekanisme internal AngularJS.