سؤال

أنا أفهم (أعتقد) أن الكائنات xmlhttprequest تلتزم بسياسة "نفس المجال". ومع ذلك، أريد إنشاء ملف HTML المحلي (POC) بسيطا (POC) يقوم بتنزيل XML من خادم ويب ويفعل شيئا معه (دعنا نبدأ بتنبيه بسيط ").

هل هذا من الممكن بأبة طريقة؟ هل أحتاج إلى خيار Firefox Config الخاص؟

الخادم الذي أحاول تنزيله هو ليس تحت سيطرتي (إنها في الواقع API Google).

محاولتي البسيطة هي الرمز من Mozilla's "باستخدام XMLHTTPRECEST". وبعد إرجاع خطأ لا أفهم حقا من طريقة "إرسال".

إخلاء المسئولية: أنا أساسا مطور C / C ++ - لم تفعل أي برمجة JS خطيرة، لم يحاكم أبدا باستخدام واجهات برمجة التطبيقات هذه.

هل كانت مفيدة؟

المحلول

يلتزم XMLHTPRequest بالفعل بتنفيذ أكثر صرامة لنفس سياسة المجال: بينما يمكنك تعيين خاصية المستند. في حالتك، الذهاب إلى مجال مختلف تماما، لا يمكنك القيام بذلك مع جافا سكريبت أيضا.

يوجد خيارين. أولا، يمكنك استخدام وكيل عكسي لجعله يبدو أن الموقع الخارجي هو مجال فرعي لموقعك. إلقاء نظرة على Apache Mod_Proxy، على وجه الخصوص ProxyPassreverse

بديل آخر هو إرجاع البيانات ككائن JSON:u003Cscript src="foo"> can retrieve whatever data it wants from wherever it wants. Downside of this is that it's not (easily) repeatable (as in multiple requests from same page).

أوصي أيضا بأنك جوجل ل "Google Mashups". معظم هذه العيش على نطاق "googlemashops.com"، مما يجعل التنفيذ أسهل بكثير. عدد قليل يعيش خارج هذا المجال، وقد يعطيك بعض الأفكار.

تحرير: بدلا من استخدام كائن XMLHTTPRECEEST مباشرة، أوصي بإجراء مكتبة جهة خارجية مثل prototype.js

نصائح أخرى

إذا تم إرجاع XML الذي تحاول استرداده من قبل أحد js apis من Google، فلا حاجة ل XMLHTTPRECEST (نظرا لأن ذلك لا يمكن استخدامه إلا في نفس المجال مثل Anway الخاص بك).

لذلك في حالة استخدام API Google، مثل خرائط ONE، عادة ما تبدأ بإضافة مرجع إلى API الشائعة في صفحتك:

<script type="text/javascript" src="http://www.google.com/jsapi?key=your_google_api_key"></script>

ثم قم بإضافة مرجع إلى API (API) المحدد الذي تخطط للاستخدام إلى صفحتك:

<script type="text/javascript">google.load("maps", "2");</script>

يمكنك الآن استدعاء الوظائف المختلفة التي توفرها تلك API:

<script type="text/javascript">
  function initialize() {
    var map = new google.maps.Map2(document.getElementById("map"));
    map.setCenter(new google.maps.LatLng(41.86, 87.68), 13);
  }
  google.setOnLoadCallback(initialize);
</script>

لا xmlhttprequest المطلوبة :)

يمكنك استخدام JSONP للقيام بذلك. أنا أفعل ذلك هنا باستخدام jQuery و php. في الأساس، استخدم وكيل PHP لف WREAL THE JSON REPLINE لذا يمكنك التعامل معه. انها تحت BSD.

بدلا من ذلك، حاول استخدام IE8. إذا كنت تعمل من القرص وليس موقع الويب الخاص ب IE8 سوف يتجاهل كل قيود المجال العادية والحصول على البيانات التي تريدها.

مع JQuery (ومن المفترض أن XHR، لكنني أحاول عدم استخدامه مباشرة)، يمكنك بسعادة طلبات عبر المجال، شريطة عدم تحديد رؤوس غير عادية أو طرق غير محددة. إذا كنت ترغب في استخدام هذه، فيجب عليك التحكم في الخادم لتمكين طلبات الخيارات.

يرى https://developer.mozilla.org/en/http_access_control. للتفاصيل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top