الأدلة

أضف قائمة منسدلة للدول تُحدَّد افتراضيًا حسب IP

القائمة المنسدلة للدول التي تُضبط افتراضيًا على ما يشير إليه عنوان IP الخاص بالزائر توفر على معظم الناس التمرير عبر قائمة طويلة، بشرط أن تسمح لهم بتغييرها عندما تكون القيمة الافتراضية خاطئة.

الحصول على القيمة الافتراضية

ابحث عن عنوان IP الخاص بالزائر على خادمك عند طلب الصفحة، واقرأ الحقل country_code من الاستجابة لتعيينه خيارًا محددًا في القائمة المنسدلة قبل أن تُرسل الصفحة إلى المتصفح أصلًا.

GET /v1/ip?ip=192.0.2.15
{
  "status": "ok",
  "ip": "192.0.2.15",
  "version": 4,
  "found": true,
  "country": "Spain",
  "country_code": "ES",
  "region": "Madrid",
  "city": "Madrid",
  "postcode": "28001",
  "lat": 40.4168,
  "lon": -3.7038,
  "timezone": "Europe/Madrid",
  "asn": 5678,
  "org": "Example Networks"
}

عرضها من جهة الخادم

بما أن هذا يحدث بالكامل من جهة الخادم، قبل عرض الصفحة، فلا يظهر وميض لقيمة افتراضية خاطئة يتبعه تصحيح في المتصفح، وهو ما يحدث مع الأساليب التي تعمل من جهة العميل وتُجري الاستدعاء بعد تحميل الصفحة. عيّن السمة selected على الخيار المطابق مباشرة في HTML الذي تولّده، مع مطابقة country_code مع رموز ISO التي تستخدمها قيم خياراتك بالفعل.

مثال ثانٍ: ملء حقل الدولة مسبقًا في صفحة الدفع

يعمل الاستدعاء نفسه بالكفاءة نفسها في صفحة الدفع كما في نموذج التسجيل. ابحث عن عنوان IP الخاص بالمتسوق مرة واحدة عند تحميل صفحة الدفع، وطابق country_code مع قائمة دول الشحن لديك، وحددها افتراضيًا. ولأن دولة الشحن تؤثر في خيارات الضرائب والتوصيل المعروضة أسفل الصفحة، فإن ضبطها بشكل صحيح قبل عرض الصفحة يتجنب إعادة ترتيب مزعجة للصفحة لاحقًا إذا اضطر الزائر إلى تصحيحها بعد أن يكون كل شيء آخر قد حُمّل بناءً على قيمة افتراضية خاطئة.

اسمح دائمًا بالتغيير

تعامل مع الدولة المستندة إلى IP على أنها نقطة بداية، لا إجابة نهائية. فالزائر المسافر، أو الذي يستخدم شبكة VPN للعمل، أو الذي يعيش ببساطة في مكان لا يطابق العنوان المسجل لمزود شبكته، سيحتاج إلى اختيار خيار مختلف، لذا لا ينبغي أن يفترض أي شيء في النموذج أن القيمة الافتراضية صحيحة.

خطأ شائع يجب تجنبه

لا تخزّن الصفحة المعروضة بالكامل مؤقتًا خلف شبكة CDN أو وكيل عكسي دون تنويعها حسب الزائر، لأن الصفحة التي تُعرض مرة واحدة لعنوان IP الخاص بأول زائر ثم تُقدَّم من الذاكرة المؤقتة للجميع بعد ذلك ستعرض دولة ذلك الزائر الأول لكل زائر لاحق بغض النظر عن مكانه الفعلي. إذا كانت صفحاتك تُخزَّن مؤقتًا أصلًا، فإما أن تستثني هذا الجزء من التخزين المؤقت أو أن تعرضه عبر تضمين صغير من جهة الخادم يعمل مع كل طلب.

التعامل مع استعلام لا يجد شيئًا

إذا عاد الحقل found بالقيمة false، وهو ما يحدث لبعض النطاقات الخاصة أو غير المخصصة، فارجع إلى قيمة افتراضية محايدة، مثل تحديد فارغ أو الدولة الأكثر شيوعًا لديك، بدلًا من ترك الحقل في حالة غير محددة.

زوار IPv6 يعملون بالطريقة نفسها

الزائر الذي يتصل عبر IPv6 يحصل على الحقل country_code نفسه من نقطة النهاية نفسها، إلا أنه يُحلَّل على أساس شبكة /48 بدلًا من /24. ولا يلزم تغيير أي شيء في منطق القائمة المنسدلة بناءً على إصدار IP الذي أرسل الطلب. راجع توثيق الاستعلام عن IPv6 إذا أردت التفاصيل الخاصة بكل إصدار.

تكلفة هذه الميزة

هذا طلب واحد لكل جلسة زائر جديدة، يُخزَّن مؤقتًا طوال الجلسة حتى لا تؤدي الزيارة الواحدة إلى استعلامات متكررة عبر صفحات نماذج متعددة. ويبقي ذلك الميزة ضمن حدود 2,500 طلب مجاني يوميًا المضمنة مع كل مفتاح، أو المتاحة من عنوان واحد من دون مفتاح، لجميع المواقع باستثناء الأكثر ازدحامًا.

القيمة الافتراضية المعقولة توفر التمرير عبر قائمة من مئة عنصر، ويظل للزائر التحكم الكامل إذا كان التخمين خاطئًا. تفاصيل الحقول موجودة في توثيق الاستعلام عن IPv4.