أولاً ، دعونا نجعل بعض الاستعدادات. خلاف ذلك ، إذا فهمت ما أعنيه ، فإن الآخرين لا يفهمون. حتى لو فهم الآخرون ، فستكون هناك دائمًا أشخاص لا يفهمون. ثم عليك أن تقول ذلك. ما أعنيه هو أن هذا التفسير يجب أن يتم. الجواب أمر لا بد منه. من أجل تسهيل فهم الجميع.
يمكننا إظهار مشاكل النطاق عبر المجال من خلال أخذ اسمين رئيسيين للمجالين أو اسم مجال واحد رئيسي + اسم مجال واحد من المستوى الثاني كأمثلة.
العميل A.COM
الخادم b.com أو sacom
الإصدار AngularJS v1.2.25
تم إجراء الاستعدادات بشكل جيد للغاية ، وقمنا تقريبًا بتعرض محررنا على أنه فرعي. لن أخبره هذا الشخص العادي.
صرخ شخص ما أن هذا السؤال كان موجودًا لفترة طويلة. ما الهدف من سؤاله الآن؟ هل يمكن أن لا يزال بإمكانك خداع الزهور؟ حسنًا ، يمكنني حقًا كتابة الزهور مفتوحة. دعنا نشاهد العرض ، ما سنؤديه في هذه المقالة هو مثال كامل للمجال.
بعد ذلك ، دعنا نرى كيف يطلب العميل بيانات
ملاحظة ، يتم كتابة الرمز الخاص بنا تحت اسم مجال A.COM
<! doctype html> <html lang = "en" ng-app = "app"> <head> <meta charset = "utf-8" []) ؛ app.controller ('appctrl' ، ['$ scope' ، function ($ scope) {$ http ({method: 'jsonp' ، url: 'http://www.b.com/test.php؟callback=json_callback' ، $ http.jsonp ('http://www.b.com/test.php؟callback=json_callback)نرى أن هذا طلب عبر المجال مباشرة في شكل JSONP ، وأن تشغيله هو بالضبط نفس طريقة طلب المجال المتقاطع في jQuery. لاحظ أن رد الاتصال الخاص بنا ثابت ، أي json_callback ، حاول عدم إجراء أي تغييرات
دعونا نلقي نظرة على طريقة اختبار. هنا نستخدم طريقة PHP الأصلية كمرجع.
$ callback = isset ($ _ get ['Callback'])؟ $ _get ['callback']: default_callback ؛ الخروج (رد الاتصال $. "('. json_encode ($ data).') ') ؛دعونا نلقي نظرة على نتائج سجل Client Console.log
في هذه المرحلة ، لقد طلبنا بنجاح عبر المجال!
أخيرًا ، دعنا نلفت ملخصًا صغيرًا وننتبه إلى النقاط الرئيسية:
1. المعلمة المضافة بعد عنوان URL الذي طلبه العميل عبر المجالات هو؟ Callback = JSON_Callback. يتم تحديد قيمة رد اتصال المعلمة باسم JSON_CALLBACK. لاحظ أنه يتم رسملة ، أي JSON_Callback ، لا تقوم بأي تغييرات. يبدو أن هذا هو حفرة كبيرة. إذا تم تغيير قيمة رد الاتصال بشكل طفيف ، فيجب على العميل تحديد وظيفة رد الاتصال على مستوى العالم ، وكيف يمكنني نقلها إلى نطاق $ للمعالجة؟ لتجنب المتاعب غير الضرورية ، إليك ما يعنيه القيام به
2. انظر إلى الخادم مرة أخرى. يحتاج الخادم إلى تحديد callback $ = $ _get ['callback'] ؛ تلقي رد الاتصال ، وسوف تجد أيضًا أن رد الاتصال المستلم ليس قيمة رد الاتصال من قبل عميلنا. يحدد العميل JSON_CALLBACK لتشغيل الآلية الداخلية لـ AngularJs.