it-swarm.asia

كيفية تقديم طلب عبر المجال

كما تعلم ، لا يسمح أمان مستعرض الويب بإجراء طلبات عبر المجال. قرأت كتابًا يفيد بأنه يجب عليك استخدام XMLHTTPRequest فقط إذا كان يمكنك وضع الملفات على الخادم (يعني وضع الصفحة التي سيتم تحميلها في نفس المجال المطلوب). إذا كنت لا تستطيع - يجب عليك البحث عن بديل.

أسئلتي هي :

  1. ما هو البديل عبر المجال ل XMLHTTPRequest؟
  2. ماذا عن WebSockets؟ هل تسمح هذه التقنية بطلب عبر النطاق؟

التحرير: لا يزال غير واضح بالنسبة لي ...

على سبيل المثال ، أسحب صفحتي من www.domain1.com وأحتاج إلى طلب javascript من www.domain2.com. لذلك يجب أن تتضمن الصفحة المسحوبة شيئًا مثل:

<script src="www.domain2.com/script.js"></script>

لتجنب القيود المفروضة على المجال.

وأستطيع استخدام JSONP ، وسيظهر الطلب كما يلي: http://ww.domain1.com/؟callback=someFunction.js

لكن: أليس كذلك؟ أنا فقط سحب شبيبة من مجال آخر! هل يتجنب القيود المفروضة على المجال؟

34
VB_

يمكنك تقديم طلبات عبر المجال باستخدام الكائن XMLHttpRequest. يتم ذلك باستخدام شيء يسمى "مشاركة المصادر المتقاطعة الأصل". راجع: http://en.wikipedia.org/wiki/Cross-Origin_resource_sharing

ببساطة شديدة ، عندما يتم تقديم الطلب إلى الخادم ، يمكن للخادم الاستجابة بـ Access-Control-Allow-Origin رأس سوف يسمح أو يرفض الطلب. يحتاج المستعرض إلى التحقق من هذا العنوان وإذا كان مسموحًا به ، فسوف يستمر في عملية الطلب. إن لم يكن المتصفح سوف يلغي الطلب.

يمكنك العثور على مزيد من المعلومات ومثال عملي هنا: http://www.leggetter.co.uk/2010/03/12/making-cross-domain-javascript-requests-using-xmlhttprequest-or- xdomainrequest.html

JSONP هو حل بديل ، ولكن يمكنك القول أنه شيء من الاختراق.

21
leggetter

قم بإجراء اتصال عبر المجال AJAX call

يجب أن تدعم خدمة الويب الخاصة بك طريقة الحقن من أجل تنفيذ JSONP.

يبدو الرمز الخاص بك جيدًا ويجب أن يعمل إذا استضافت خدمات الويب وتطبيق الويب الخاص بك في نفس المجال.

عند القيام بـ $ .ajax باستخدام dataType: يعني "jsonp" أن jQuery يضيف بالفعل معلمة جديدة إلى عنوان URL الخاص بالاستعلام.

على سبيل المثال ، إذا كان عنوان URL الخاص بك هو http://10.211.2.219:8080/SampleWebService/sample.do فسوف تضيف jQuery؟ callback = {some_random_dynamically_generated_method}.

هذه الطريقة أكثر نوعًا من البروكسي الموصول فعليًا في كائن النافذة. هذا ليس شيئًا محددًا ، لكن يبدو مثل هذا:

window.some_random_dynamically_generated_method = function(actualJsonpData) {
    //here actually has reference to the success function mentioned with $.ajax
    //so it just calls the success method like this: 
    successCallback(actualJsonData);
}

تحقق ما يلي لمزيد من المعلومات

تقديم طلب اجاكس عبر النطاق JSONP مع jQuery

5
Arun Bertil

إذا كنت على استعداد لنقل بعض البيانات ولا تحتاج إلى تأمين (أي معلومات عامة) ، يمكنك استخدام وكيل CORS ، إنه سهل للغاية ، فلن تضطر إلى تغيير أي شيء في التعليمات البرمجية أو في جانب الخادم (لا سيما أنه ليس خادمك مثل Yahoo API أو OpenWeather). لقد استخدمته لإحضار ملفات JSON باستخدام XMLHttpRequest وكان يعمل بشكل جيد.

4
Tarek Jellali