واجهت مشكلة عبر المجال قبل يومين ، ويمكن حلها باستخدام JSONP. (//www.vevb.com/article/57889.htm)
لقد قمت بفرز مؤخرًا:
1.jsonp.
Ajax request ، نوع البيانات هو JSONP. يتطلب هذا النموذج ضبط الطلب على النموذج الذي يعيد رد الاتصال ([JSON-OBJECT]) على جانب الخادم. إذا قام الخادم بإرجاع كائن JSON العادي. ثم عند تصحيح الأخطاء ، سيتم الإبلاغ عن خطأ "SyntaxerRor غير المقتولي: الرمز المميز غير المتوقع" على وحدة التحكم في متصفح Chrome ؛ سيتم الإبلاغ عن خطأ "SyntaxerRor: مفقود ؛ قبل البيان" على وحدة التحكم في متصفح Firefox.
2.IFRAME المتقاطع.
إضافة عنصر iframe إلى الصفحة. عندما تحتاج إلى الاتصال بطلب الحصول على SRC IFRAME إلى عنوان URL للطلب للحصول على طلب الاتصال على طلب الحصول.
نسخة الكود كما يلي:
var url = "http://xxx.xxx.xxx؟p1=1&p2=2" ؛
$ ("#iframe"). attr ("src" ، url) ؛ // cross-domain ، استخدم iframe
طريقة iframe أقوى من JSONP. بالإضافة إلى القدرة على التعامل مع طلبات HTTP ، يمكنه أيضًا تنفيذ مكالمات JS عبر المجالات.
3. معالجة سمات SRC لعناصر البرنامج النصي
يمكن أن تطلب سمات SRC لـ IFRAME و IMG و Style و Script والعناصر الأخرى الموارد مباشرة من مجالات مختلفة. JSONP هو تطبيق بسيط لموارد طلب المجال المتقاطع باستخدام علامات البرنامج النصي. لذلك ، هذا هو نفس الشيء مثل JSONP ، ويتطلب أيضًا من الخادم طلب نموذج رد الاتصال ....
نسخة الكود كما يلي:
var url = "http://xxx.xxx.xxx؟p1=1" ؛
var script = document.createElement ('script') ؛
script.setAttribute ('src' ، url) ؛
document.getElementsByTagName ('head') [0] .appendChild (script) ؛
4. استخدم الحصول على المعالجة على الخادم.
بالنسبة لأولئك الذين ليس لديهم أي متطلبات صلبة للمعالجة على الواجهة الأمامية ، يمكنهم تغليفها على الخادم ثم بدء المكالمات على الخادم ، والتي يمكنها حل مشكلة المجال المتقاطع. بعد ذلك ، استنادًا إلى ما إذا كان يتم إصدار الطلب أو يجب الحصول على قيمة الإرجاع ، سنقرر ما إذا كان الرمز يستخدم الوضع المتزامن أو غير متزامن.
نسخة الكود كما يلي:
private static void creategethttpresponse (url url string ، int؟ timeout ، useragent string ، cookiecollection cookies)
{
if (string.isnullorempty (url))
{
رمي الجدل الجديد ("url") ؛
}
var request = webRequest.create (url) مثل httpwebrequest ؛
request.method = "get" ؛
if (! string.isnullorempty (useragent))
{
request.userAgent = userAgent ؛
}
إذا (timeout.hasvalue)
{
request.timeout = timeout.value ؛
}
إذا (ملفات تعريف الارتباط! = خالية)
{
request.cookieContainer = new CookieContainer () ؛
request.cookieContainer.add (ملفات تعريف الارتباط) ؛
}
request.begingetresponse (NULL ، NULL) ؛ // غير متزامن
// Return request.getResponse () كـ httpwebropsonse ؛
}
5. فلاش المتقاطع
متطور جدًا == ، درسه مرة أخرى
ملخص: الطرق الخمسة المذكورة أعلاه هي طرق شائعة لحل مشاكل المجال المتقاطع في JS. آخر واحد هو متطور نسبيا. دعنا نعوض عنها بعد أن درستها بوضوح.