javascript इन भाषाओं - जावास्क्रिप्ट फ़ाइलों को पैरामीटर पास करना




6 Answers

यदि संभव हो तो मैं वैश्विक चर का उपयोग न करने की सलाह दूंगा। ऑब्जेक्ट के माध्यम से अपने तर्कों को पारित करने के लिए नामस्थान और ओओपी का उपयोग करें।

यह कोड file.js में है:

var MYLIBRARY = MYLIBRARY || (function(){
    var _args = {}; // private

    return {
        init : function(Args) {
            _args = Args;
            // some other initialising
        },
        helloWorld : function() {
            alert('Hello World! -' + _args[0]);
        }
    };
}());

और आपकी एचटीएमएल फाइल में:

<script type="text/javascript" src="file.js"></script>
<script type="text/javascript">
   MYLIBRARY.init(["somevalue", 1, "controlId"]);
   MYLIBRARY.helloWorld();
</script>
से प्रेरित

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

तो कोड इस तरह कुछ है:

<script type="text/javascript" src="file.js"></script>
<script type="text/javascript">
   var obj1 = "somevalue";
</script>

लेकिन मैं क्या करना चाहता हूं:

<script type="text/javascript" 
     src="file.js?obj1=somevalue&obj2=someothervalue"></script>

मैंने विभिन्न तरीकों का प्रयास किया और सबसे अच्छा अभी तक क्वेरी स्ट्रिंग को पार्स करना है:

var scriptSrc = document.getElementById("myscript").src.toLowerCase();

और फिर मेरे मूल्यों की खोज करें।

मुझे आश्चर्य है कि मेरी स्ट्रिंग को पार्स करने के लिए फ़ंक्शन बनाने के बिना ऐसा करने का कोई और तरीका है या नहीं।

क्या आप सभी अन्य तरीकों को जानते हैं?




एक और विचार जो मैंने पार किया था वह तत्व को "आईडी" असाइन कर रहा था और तर्कों को डेटा- * विशेषताओं के रूप में पास कर रहा था। परिणामस्वरूप टैग कुछ ऐसा दिखाई देगा:

<script id="helper" data-name="helper" src="helper.js"></script>

स्क्रिप्ट तब आईडी को प्रोग्रामेटिक रूप से ढूंढने और तर्कों का विश्लेषण करने के लिए उपयोग कर सकती है। पिछले टैग को देखते हुए, नाम इस तरह से पुनर्प्राप्त किया जा सकता है:

var name = document.getElementById("helper").getAttribute("data-name");

हमें नाम = सहायक मिलता है




यहां अवधारणा का एक बहुत ही सबूत है।

मुझे यकीन है कि कम से कम 2 स्थान हैं जहां सुधार हो सकते हैं, और मुझे भी यकीन है कि यह जंगली में लंबे समय तक जीवित नहीं रहेगा। इसे और अधिक प्रस्तुत करने योग्य या प्रयोग करने योग्य बनाने के लिए कोई प्रतिक्रिया स्वागत है।

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

स्क्रिप्ट कहा जा रहा है:

window.onload = function() {
//Notice that both possible parameters are pre-defined.
//Which is probably not required if using proper object notation
//in query string, or if variable-variables are possible in js.
var header;
var text;

//script gets the src attribute based on ID of page's script element:
var requestURL = document.getElementById("myScript").getAttribute("src");

//next use substring() to get querystring part of src
var queryString = requestURL.substring(requestURL.indexOf("?") + 1, requestURL.length);

//Next split the querystring into array
var params = queryString.split("&");

//Next loop through params
for(var i = 0; i < params.length; i++){
 var name  = params[i].substring(0,params[i].indexOf("="));
 var value = params[i].substring(params[i].indexOf("=") + 1, params[i].length);

    //Test if value is a number. If not, wrap value with quotes:
    if(isNaN(parseInt(value))) {
  params[i] = params[i].replace(value, "'" + value + "'");
 }

    // Finally, use eval to set values of pre-defined variables:
 eval(params[i]);
}

//Output to test that it worked:
document.getElementById("docTitle").innerHTML = header;
document.getElementById("docText").innerHTML = text;
};

स्क्रिप्ट निम्नलिखित पृष्ठ के माध्यम से बुलाया जाता है:

<script id="myScript" type="text/javascript" 
        src="test.js?header=Test Page&text=This Works"></script>

<h1 id="docTitle"></h1>
<p id="docText"></p>



बहुत आसान हो सकता है

उदाहरण के लिए

<script src="js/myscript.js?id=123"></script>
<script>
    var queryString = $("script[src*='js/myscript.js']").attr('src').split('?')[1];
</script>

फिर आप प्रश्न स्ट्रिंग को जेसन में नीचे की तरह परिवर्तित कर सकते हैं

var json = $.parseJSON('{"' 
            + queryString.replace(/&/g, '","').replace(/=/g, '":"') 
            + '"}');

और फिर इस तरह उपयोग कर सकते हैं

console.log(json.id);



अच्छा सवाल और रचनात्मक उत्तर लेकिन मेरा शर्करा है कि आप अपनी विधियों को बेहतर बनाते हैं और इससे आपकी सभी समस्याओं को बिना किसी चाल के हल करना चाहिए।

यदि आपके पास कार्य है:

function A()
{
    var val = external_value_from_query_string_or_global_param;
}

आप इसे यहां बदल सकते हैं:

function B(function_param)
{
    var val = function_param;
}

मुझे लगता है कि यह सबसे प्राकृतिक दृष्टिकोण है, आपको 'फाइल पैरामीटर' के बारे में अतिरिक्त दस्तावेज को क्रेट करने की आवश्यकता नहीं है और आपको वही मिलता है। यह विशेष रूप से उपयोगी है यदि आप अन्य डेवलपर्स को अपनी जेएस फ़ाइल का उपयोग करने की अनुमति देते हैं।




नहीं, आप वास्तव में जेएस फ़ाइल यूआरएल के क्वेरीस्ट्रिंग हिस्से में चर जोड़कर ऐसा नहीं कर सकते हैं। यदि कोड को उस स्ट्रिंग को पार्स करने के लिए कोड का हिस्सा लिखता है जो आपको परेशान करता है, तो शायद एक और तरीका है कि जेसन आपके चर को एन्कोड करें और उन्हें टैग की रिला एट्रिब्यूट की तरह कुछ डालें? मुझे नहीं पता कि एचटीएमएल सत्यापन के मामले में यह कितना वैध है, अगर ऐसा कुछ है जिसके बारे में आप बहुत चिंतित हैं। फिर आपको स्क्रिप्ट के रिला एट्रिब्यूट को खोजने की आवश्यकता है और उसके बाद json_decode।

जैसे

<script type='text/javascript' src='file.js' rel='{"myvar":"somevalue","anothervar":"anothervalue"}'></script>



Related