2008-09-20 15 views
18

मेरे पास जावास्क्रिप्ट फ़ाइल में कुछ कोड है जिसे सर्वर पर प्रश्न भेजने की आवश्यकता है। सवाल यह है कि, मैं उस स्क्रिप्ट के लिए यूआरएल कैसे प्राप्त करूं जिसमें मैं हूं, इसलिए मैं AJAX के लिए उचित अनुरोध यूआरएल बना सकता हूं।जावास्क्रिप्ट फ़ाइलों के लिए संबंधित यूआरएल

अर्थात, और एक ही स्क्रिप्ट, पर /, /help, /whatever, और इतने पर शामिल है, जबकि यह हमेशा /data.json से अनुरोध करना होगा है। इसके अतिरिक्त, एक ही साइट विभिन्न सर्वरों पर चलती है, जहां /-फ़ोल्डर को अलग-अलग रखा जा सकता है। मेरे पास सापेक्ष यूआरएल को हल करने का मतलब है जहां मैं जावास्क्रिप्ट (ईज़ी-प्रकाशित टेम्पलेट) शामिल करता हूं, लेकिन जावास्क्रिप्ट फ़ाइल के भीतर नहीं।

क्या ऐसी छोटी स्क्रिप्ट हैं जो इसके लिए किए गए सभी ब्राउज़रों पर काम करती हैं?

उत्तर

23

इसके लिए मैं पृष्ठ के <head> में <link> तत्वों को रखना चाहता हूं, जिसमें अनुरोधों के लिए उपयोग करने के लिए यूआरएल शामिल हैं। वे अपने सर्वर साइड भाषा के द्वारा उत्पन्न की जा सकती है, इसलिए वे हमेशा सही दृश्य को इंगित:

<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; 
+0

आह। लगता है कि मैं जवाब के सबसे सरल याद किया :)। – Staale

+0

यह लिंक टैग का एक बड़ा उपयोग है। –

+0

मैं सभी स्क्रिप्ट टैगों के माध्यम से एक समाधान का निर्माण कर रहा था और अपनी खुद की लिपि ढूंढ रहा था, फिर उससे संबंधित कुछ। हालांकि यह बहुत आसान है। – Staale

3

document.location.href आपको वर्तमान यूआरएल देगा, जिसे आप जावास्क्रिप्ट के स्ट्रिंग फ़ंक्शंस का उपयोग करके कुशलतापूर्वक उपयोग कर सकते हैं।

+0

यह मेरे लिए उपयोगी नहीं है, क्योंकि मुझे वेबपैड रूट खोजने की आवश्यकता है, जो सर्वर से सर्वर (इस मामले में डेवलपर मशीन सेटअप) में भिन्न हो सकती है। – Staale

+0

वेबपैप किस सर्वर-साइड तकनीक का उपयोग करता है? इस मामले में –

+0

अपाचे, PHP और ez-publ। हालांकि मुझे शुद्ध जावास्क्रिप्ट में कुछ चाहिए जो सर्वोसाइड प्रौद्योगिकी पर ध्यान दिए बिना काम करेगा। निश्चित रूप से – Staale

3

नहीं है कोई तरीका नहीं है कि क्लाइंट सर्वर द्वारा बताए बिना वेबपैड रूट निर्धारित कर सकता है क्योंकि उसे सर्वर की कॉन्फ़िगरेशन का कोई ज्ञान नहीं है। एक विकल्प तुम कोशिश कर सकते (इसलिए यह प्रत्येक सर्वर के लिए प्रासंगिक यूआरएल पता चलता) सिर तत्व के अंदर आधार तत्व का उपयोग करने के लिए, यह उत्पन्न करने के लिए सेवक को गतिशील बजाय यह हार्डकोड है:

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

सभी URL को तो होगा इसके सापेक्ष व्यवहार किया जाना चाहिए। इसलिए आप बस /data.json पर अपना अनुरोध करेंगे। हालांकि आपको यह सुनिश्चित करने की आवश्यकता है कि आवेदन के सभी अन्य लिंक इसे ध्यान में रखें।

/** 
* 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 एक वैश्विक सरणी कॉन्फ़िगरेशन विकल्प युक्त:

+0

ऐसा लगता है कि इस तत्व को वास्तव में इस प्रश्न में समस्या को हल करने का इरादा है। एमडीएन का कहना है कि यह भी अच्छी तरह से समर्थित है: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base – Phil

+0

थोड़ा और अधिक '' में देखकर, ऐसा लगता है कि कुछ प्रमुख चेतावनी हैं जागरूक रहें। उदाहरण के लिए, '' जैसे एंकर लिंक तोड़ देंगे। देखें: http://stackoverflow.com/a/1889898/1299695 – Phil

0

मैं अपने पुस्तकालयों में निम्न कोड मुख्य प्रवेश बिंदु (main.php) शामिल हैं। तो साइट_सफिक्स आपके विकास बॉक्स पर "/ sites_working/thesite/public_html" जैसा दिख सकता है, और वर्चुअल होस्ट (डोमेन नाम) वाले सर्वर पर बस "/"।

यह विधि भी अच्छी है, क्योंकि अगर कोई आपके विकास बॉक्स के आईपी पते में टाइप करता है, तो यह उसी स्थानीय आईपी पते का उपयोग करेगा जो "लोकलहोस्ट" जैसे कुछ के बजाय जावास्क्रिप्ट फ़ोल्डर का पथ बनाने के लिए करेगा और यदि आप उपयोग करते हैं "localhost" यह URL बनाने के लिए "localhost" का उपयोग करेगा।

और क्योंकि यह एसएसएल का भी पता लगाता है, तो आपको मौसम के बारे में चिंता करने की ज़रूरत नहीं है यदि आपके सर्वर में कभी भी एसएसएल समर्थन जोड़ते हैं तो आपके संसाधन HTTP या HTTPS पर भेजे जाएंगे।

फिर, अपने टेम्पलेट में, या तो का उपयोग

<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> 

मुझे लगता है बाद तेजी से होगा।

2

यदि स्क्रिप्ट अपने स्वयं के फ़ाइल नाम जानता है, तो आप दस्तावेज़ का उपयोग कर सकते हैं। getElementsByTagName()। सूची के माध्यम से तब तक घुमाएं जब तक आपको अपनी स्क्रिप्ट नहीं मिलती है, और उस तरह से पूर्ण (या रिश्तेदार) यूआरएल निकालें।

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')); 

को ध्यान में रखना है कि इस दृष्टिकोण फ़ाइल नाम टकराव के अधीन है:

यहाँ एक उदाहरण है।

+0

कूल। हालांकि, यह src विशेषता के बिना स्क्रिप्ट पर टूट जाता है। यदि आप अपनी सशर्त को 'if (src && src.match (re)) में समायोजित करते हैं, तो यह काम करता है। कोड के लिए धन्यवाद! –

+0

अच्छा समाधान। यह कितना विश्वसनीय/क्रॉस-ब्राउज़र है? – dkamins

संबंधित मुद्दे