JQuery के साथ GET और POST चर कैसे प्राप्त करें?


95

मैं बस कैसे प्राप्त करूं GETऔर POSTJQuery के साथ मूल्य क्या करूं

मैं ऐसा कुछ करना चाहता हूं:

$('#container-1 > ul').tabs().tabs('select', $_GET('selectedTabIndex'));

जवाबों:


170

जीईटी मापदंडों के लिए, आप उन्हें इनसे ले सकते हैं document.location.search:

var $_GET = {};

document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () {
    function decode(s) {
        return decodeURIComponent(s.split("+").join(" "));
    }

    $_GET[decode(arguments[1])] = decode(arguments[2]);
});

document.write($_GET["test"]);

POST मापदंडों के लिए, आप $_POSTJSON फॉर्मेट में ऑब्जेक्ट को <script>टैग में क्रमबद्ध कर सकते हैं :

<script type="text/javascript">
var $_POST = <?php echo json_encode($_POST); ?>;

document.write($_POST["test"]);
</script>

जब आप इसमें हों (सर्वर साइड पर चीजें कर रहे हों), तो आप PHP पर GET के मापदंडों को भी एकत्र कर सकते हैं:

var $_GET = <?php echo json_encode($_GET); ?>;

नोट: आपको अंतर्निहित json_encodeफ़ंक्शन का उपयोग करने के लिए PHP संस्करण 5 या उच्चतर की आवश्यकता होगी ।


अपडेट: यहां एक अधिक सामान्य कार्यान्वयन है:

function getQueryParams(qs) {
    qs = qs.split("+").join(" ");
    var params = {},
        tokens,
        re = /[?&]?([^=]+)=([^&]*)/g;

    while (tokens = re.exec(qs)) {
        params[decodeURIComponent(tokens[1])]
            = decodeURIComponent(tokens[2]);
    }

    return params;
}

var $_GET = getQueryParams(document.location.search);

3
आपका निष्कर्षण विधि बिना किसी मूल्य के तर्कों पर विचार नहीं करता है ("? Foo & bar = baz" => {foo: "", bar: "baz"})।
गुमबो

1
अच्छा कैच गंबू! रेगेक्स में = को वैकल्पिक बनाया जाना चाहिए: ... स्निप ... (?: = ([^ &] *))?;?) / G
एट्स गोरल

1. आपका पहला GET उदाहरण मेरे लिए काम नहीं करता है। 2. आपके अपडेट में, आपके फ़ंक्शन का नाम इसमें एक टाइपो है
जेक विल्सन

क्या आपने सफारी या क्रोम में दौड़ने की कोशिश की है? यह एक अनंत लूप बनाता है और ब्राउज़र को क्रैश करता है। इसे कुछ इस तरह आज़माएं जैसे "p? 2"
MrColes

@MrColes: Yikes। मुझे यह लिखते हुए कुछ समय हो गया है। तब से, मैंने पाया है कि वेबकिट RegExp ऑब्जेक्ट के आंतरिक स्थिति काउंटर को तब अपडेट नहीं करता है जब इसे शाब्दिक रूप में उपयोग किया जाता है। मैं अपने उत्तर को फिक्स के साथ अपडेट करूंगा।
एतेस गोराल

16

.GetUrlParams नामक GET params प्राप्त करने के लिए jQuery के लिए एक प्लगइन है

POST के लिए एकमात्र समाधान PHP का उपयोग करके जावास्क्रिप्ट चर में POST की गूंज है, जैसे मोरन ने सुझाव दिया।


6

अच्छे पुराने PHP का उपयोग क्यों न करें? उदाहरण के लिए, मान लें कि हमें एक GET पैरामीटर 'लक्ष्य' प्राप्त हुआ है:

function getTarget() {
    var targetParam = "<?php  echo $_GET['target'];  ?>";
    //alert(targetParam);
}

7
क्योंकि यह सर्वर साइड सॉल्यूशन है, और सवाल क्लाइंट साइड / जावास्क्रिप्ट / jQuery साइड के बारे में था।
हृदयोज कुसूलजा

@hkusulja चोट का अपमान जोड़ना: भले ही आप इसकी पुष्टि करें, फिर भी मैं यह नहीं देख सकता कि प्रश्न विशेष रूप से सर्वर-साइड है। मैं एक उपकरण के रूप में मोटा महसूस करता हूं ...
टोनी गिल

1
यह लिपि गुप्त है। यदि आप अपनी साइट को हैक करना चाहते हैं तो इसका उपयोग करें। हमेशा भागने वाले उपयोगकर्ता चर में प्रवेश करते हैं !! $ _GET को सीधे आउटपुट न करें।
charj

5

या आप इस एक का उपयोग कर सकते हैं http://plugins.jquery.com/project/parseQuery , यह सबसे अधिक (छोटा 449 बाइट्स) से छोटा है, नाम-मूल्य जोड़े का प्रतिनिधित्व करने वाली एक वस्तु देता है।


3

किसी भी सर्वर-साइड भाषा के साथ, आपको POST चर को जावास्क्रिप्ट में फेंकना होगा।

नेट

var my_post_variable = '<%= Request("post_variable") %>';

बस खाली मूल्यों से सावधान रहें। यदि आप जिस वेरिएबल का उत्सर्जन करने का प्रयास करते हैं, वह वास्तव में खाली है, तो आपको जावास्क्रिप्ट सिंटैक्स त्रुटि मिलेगी। यदि आप जानते हैं कि यह एक स्ट्रिंग है, तो आपको इसे उद्धरणों में लपेटना चाहिए। यदि यह पूर्णांक है, तो आप यह देखने के लिए परीक्षण करना चाह सकते हैं कि क्या यह वास्तव में जावास्क्रिप्ट को लाइन लिखने से पहले मौजूद है।


1
हालांकि आपके पास हमेशा सर्वर-साइड भाषाओं तक पहुंच नहीं होती है। उदाहरण के लिए गिटहब पृष्ठ ...
एडम बी


2

GETएक वैश्विक वस्तु में सभी चर इकट्ठा करने के लिए यहां कुछ है , एक दिनचर्या कई वर्षों से अनुकूलित है। JQuery के उदय के बाद से, अब उन्हें jQuery में ही संग्रहीत करना उचित लगता है, जॉन के साथ संभावित मुख्य कार्यान्वयन पर जाँच कर रहा है।

jQuery.extend({
    'Q' : window.location.search.length <= 1 ? {}
        : function(a){
            var i = a.length, 
                r = /%25/g,  // Ensure '%' is properly represented 
                h = {};      // (Safari auto-encodes '%', Firefox 1.5 does not)
            while(i--) {
                var p = a[i].split('=');
                h[ p[0] ] = r.test( p[1] ) ? decodeURIComponent( p[1] ) : p[1];
            }
            return h;
        }(window.location.search.substr(1).split('&'))
});

उदाहरण का उपयोग:

switch ($.Q.event) {
    case 'new' :
        // http://www.site.com/?event=new
        $('#NewItemButton').trigger('click');
        break;
    default :
}

उम्मीद है की यह मदद करेगा। ;)


1

jQuery के प्लगइन्स अच्छे लगते हैं लेकिन मुझे जो चाहिए वो मिलता है क्विक जेएस फंक्शन गेट पार्स पाने के लिए। यहाँ मैं क्या पाया है।

http://www.bloggingdeveloper.com/post/JavaScript-QueryString-ParseGet-QueryString-with-Client-Side-JavaScript.aspx


1

यदि आपका $ _GET बहुआयामी है, तो यह वही हो सकता है जो आप चाहते हैं:

var $_GET = {};
document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () {
    function decode(s) {
            return decodeURIComponent(s.split("+").join(" "));
    }

    //handling for multidimensional arrays
    if(decode(arguments[1]).indexOf("[]") > 0){
        var newName = decode(arguments[1]).substring(0, decode(arguments[1]).length - 2);
        if(typeof $_GET[newName] == 'undefined'){
            $_GET[newName] = new Array();
        }
        $_GET[newName].push(decode(arguments[2]));
    }else{
        $_GET[decode(arguments[1])] = decode(arguments[2]);
    }
});

1

URL से var / मान प्राप्त करने के लिए सरल, लेकिन अभी तक उपयोगी है:

function getUrlVars() {
    var vars = [], hash, hashes = null;
    if (window.location.href.indexOf("?") && window.location.href.indexOf("&")) {
        hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    } else if (window.location.href.indexOf("?")) {
        hashes = window.location.href.slice(window.location.href.indexOf('?') + 1);
    }
    if (hashes != null) {
        for (var i = 0; i < hashes.length; i++) {
            hash = hashes[i].split('=');
            vars[hash[0]] = hash[1];
        }
    }
    return vars;
}

मैंने इसे इंटरनेट पर कहीं पाया, बस कुछ कीड़े तय किए


1

निम्नलिखित फ़ंक्शन का उपयोग करें:

var splitUrl = function() {
    var vars = [], hash;
    var url = document.URL.split('?')[0];
    var p = document.URL.split('?')[1];
    if(p != undefined){
        p = p.split('&');
        for(var i = 0; i < p.length; i++){
            hash = p[i].split('=');
            vars.push(hash[1]);
            vars[hash[0]] = hash[1];
        }
    }
    vars['url'] = url;
    return vars;
};

और वैरिएबल एक्सेस करें vars['index']जहां गेट वेरिएबल 'index'का नाम है।


यह कोड UTL जैसे के लिए विफल रहता है http://foo.com/?a=b#bar। यह सोचता b#barहै कि इसके लिए मूल्य है a
MM

1

इसे सरल रखें

VARIABLE_KEY को इसके मान को प्राप्त करने के लिए चर की कुंजी के साथ बदलें

 var get_value = window.location.href.match(/(?<=VARIABLE_KEY=)(.*?)[^&]+/)[0]; 

0

केवल रिकॉर्ड के लिए, मैं इस प्रश्न का उत्तर जानना चाहता था, इसलिए मैंने एक PHP विधि का उपयोग किया:

<script>
var jGets = new Array ();
<?
if(isset($_GET)) {
    foreach($_GET as $key => $val)
        echo "jGets[\"$key\"]=\"$val\";\n";
}
?>
</script>

इस तरह मेरे सभी जावास्क्रिप्ट / jquery जो इसके बाद चलता है सब कुछ jGets में पहुँच सकता है। इसका एक अच्छा सुरुचिपूर्ण समाधान मुझे लगता है।


0

मेरा दृष्टिकोण:

var urlParams;
(window.onpopstate = function () {
var match,
      pl     = /\+/g,  Regex for replacing addition symbol with a space
       search = /([^&=]+)=?([^&]*)/g,
      decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); },
       query  = window.location.search.substring(1);
   urlParams = {};
   while (match = search.exec(query))
    urlParams[decode(match[1])] = decode(match[2]);
})();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.