سؤال

لدي بعض التعليمات البرمجية في ملف جافا سكريبت التي تحتاج إلى إرسال الاستعلامات إلى ملقم.السؤال هو كيف يمكنني العثور على عنوان url السيناريو الذي أنا في بناء طلب السليم url اياكس.

I. e., نفس السيناريو المدرجة على /, /help, /whatever, وهكذا ، في حين أنها سوف تحتاج دائما إلى طلب من /data.json.بالإضافة إلى ذلك, نفس الموقع يتم تشغيلها على خوادم مختلفة ، حيث /-المجلد قد تكون وضعت بشكل مختلف.لدي وسيلة لحل url النسبي حيث تشمل جافا سكريبت (ez-نشر القالب), ولكن ليس في جافا سكريبت الملف نفسه.

هناك صغيرة النصوص التي سوف تعمل على جميع المتصفحات صنعت هذا ؟

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

المحلول

لهذا أحب أن أضع <link> العناصر في الصفحة <head>, يتضمن عناوين المواقع إلى استخدام الطلبات.أنها يمكن أن تتولد عن طريق الخادم الخاص بك-جانب اللغة بحيث تشير دائما إلى الرأي الصحيح:

<link id="link-action-1" href="${reverse_url ('action_1')}"/>

يصبح

<link id="link-action-1" href="/my/web/root/action-1/"/>

و يمكن استرجاعها عن طريق جافا سكريبت مع:

document.getElementById ('link-action-1').href;

نصائح أخرى

document.location.href سوف تعطيك رابط الحالية ، والتي يمكنك ثم التلاعب باستخدام جافا سكريبت هي سلسلة من المهام.

ليس هناك طريقة يمكن للعميل تحديد webapp الجذر دون أن قلت من قبل الملقم كما أنه لا يوجد لديه المعرفة من تكوين الملقم.خيار واحد يمكنك محاولة استخدام قاعدة عنصر داخل عنصر رأس, الحصول على الخادم أن تولد بشكل حيوي بدلا من hardcoding ذلك (حتى يظهر URL ذات الصلة لكل server):

<base href="http://path/to/webapp/root/" />

كل عناوين المواقع التي ستتم معالجتها بالنسبة إلى هذا.ولذلك كنت ببساطة جعل طلبك /البيانات.json.ومع ذلك تحتاج إلى التأكد من أن جميع الروابط الأخرى في تطبيق هذا في الاعتبار.

إذا كان البرنامج النصي يعرف تلقاء نفسها اسم الملف يمكنك استخدام الوثيقة.getElementsByTagName().من خلال تكرار القائمة حتى تجد النص الذي يطابق لك و استخراج كامل (أو النسبية) url بهذه الطريقة.

هنا مثال:

function getScriptUrl ( name ) {
    var scripts = document.getElementsByTagName('script');
    var re = RegExp("(\/|^)" + name + "$");
    var src;
    for( var i = 0; i < scripts.length; i++){
        src = scripts[i].getAttribute('src');
        if( src.match(re) )
            return src;
    }
    return null;
}

console.log( 'found ' + getScriptUrl('demo.js') );

تأخذ في الاعتبار أن هذا النهج هو تخضع اسم الملف التصادم.

إدراج التعليمات البرمجية التالية في المكتبات نقطة الدخول الرئيسية (main.php):

/**
 * Build current url, depending on protocal (http/https),
 * port, server name and path suffix
 */
$site_root = 'http';
if (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") 
    $site_root .= "s";
$site_root .= "://" . $_SERVER["SERVER_NAME"];
if ($_SERVER["SERVER_PORT"] != "80")
    $site_root .= ":" . $_SERVER["SERVER_PORT"];
$site_root .= $g_config["paths"]["site_suffix"];

$g_config["paths"]["site_root"] = $site_root;

$g_config هي مجموعة عالمية تحتوي على خيارات التكوين.حتى site_suffix قد تبدو مثل:"/sites_working/thesite/بوبليك" على تطوير مربع فقط "/" على ملقم مع المضيف الظاهري (اسم المجال).

هذا الأسلوب هو أيضا جيدة ، لأنه إذا كان شخص ما أنواع في عنوان IP الخاص بصندوق التنمية ، فإنه سيتم استخدام نفس عنوان IP لبناء المسار إلى مجلد javascript بدلا من شيء من هذا القبيل "localhost" و إذا كنت تستخدم "localhost" فإنه سيتم استخدام "localhost" لبناء URL.

و لأنه أيضا بالكشف عن SSL, لن تحتاج للقلق حول الطقس الموارد الخاصة بك سيتم إرسالها عبر HTTP أو HTTPS إذا كنت من أي وقت مضى إضافة دعم SSL على الملقم الخاص بك.

ثم في القالب الخاص بك ، إما استخدام

<link id="site_root" href="<?php echo $g_config["paths"]["site_root"] ?>"/>

أو

<script type = "text/javascript">
var SiteRoot = "<?php echo $g_config["paths"]["site_root"]; ?>";
</script>

أفترض أن هذا الأخير سيكون أسرع.

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