জিকুয়েরির সাথে জিইটি এবং পোষ্ট ভেরিয়েবল কীভাবে পাবেন?


উত্তর:


171

GET পরামিতিগুলির জন্য, আপনি সেগুলি এখান থেকে গ্রাউন্ড করতে পারেন 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জেএসওএন ফর্ম্যাটে অবজেক্টটিকে একটি <script>ট্যাগে সিরিয়ালাইজ করতে পারেন :

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

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

আপনি এটির সময়ে (সার্ভারের পক্ষের জিনিসগুলি করছেন), আপনি পিএইচপি-তেও জিইটি প্যারামিটারগুলি সংগ্রহ করতে পারেন:

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

দ্রষ্টব্য: অন্তর্নির্মিত json_encodeফাংশনটি ব্যবহার করার জন্য আপনার পিএইচপি সংস্করণ 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);

4
আপনার নিষ্কাশন পদ্ধতিটি কোনও মান ("? Foo & bar = baz" => {foo: "", বার: "বাজ"}) দিয়ে আর্গুমেন্ট বিবেচনা করে না।
গম্বো

4
গাম্বো ভালো লাগছে! রেজেক্সে থাকা = = টি alচ্ছিক করা উচিত: ... স্নিপ ... (?: (([^ &] *))? এবং?) / জি
এটেস গোড়াল

1. আপনার প্রথম জিইটি উদাহরণটি আমার পক্ষে কাজ করে না বলে মনে হচ্ছে। ২. আপনার আপডেটে আপনার ফাংশনটির নামটিতে একটি টাইপ রয়েছে
জ্যাক উইলসন

আপনি কি সাফারি বা ক্রোমে এটি চালানোর চেষ্টা করেছেন? এটি একটি অসীম লুপ তৈরি করে এবং ব্রাউজারটিকে ক্র্যাশ করে। "? পি = 2" এর মতো সহজ কিছু দিয়ে এটি ব্যবহার করে দেখুন
মিস্টারকোলস ২১:১২-এ

@ মিআরকোলস: হাই আমি যখন এটি লিখেছি এটি একটি সময় হয়েছে। সেই থেকে, আমি আবিষ্কার করেছি যে ওয়েবকিট যখন আক্ষরিক হিসাবে ব্যবহৃত হয় তখন রেগএক্সপ্যাক্সের অভ্যন্তরীণ অবস্থানের কাউন্টারটিকে আপডেট করে না। আমি আমার উত্তরটি স্থির করে আপডেট করব।
এটেস গোলাল

16

জেটুআরএলকে .getUrlParams নামক GET প্যারামগুলি পাওয়ার জন্য একটি প্লাগইন রয়েছে

পোষ্টের জন্য একমাত্র সমাধান হ'ল পিওএসটি ব্যবহার করে জাভাস্ক্রিপ্ট ভেরিয়েবলের মধ্যে পোষ্টের প্রতিধ্বনি করা হবে যেমন মোড়ান প্রস্তাবিত হয়েছিল।


6

কেন পুরাতন পিএইচপি ব্যবহার করবেন না? উদাহরণস্বরূপ, আসুন আমরা বলতে পারি যে আমরা একটি জিইটি প্যারামিটার 'লক্ষ্য' পেয়েছি:

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

7
কারণ এটি সার্ভার সাইড সলিউশন এবং প্রশ্নটি ক্লায়েন্ট সাইড / জাভাস্ক্রিপ্ট / jQuery সাইড সম্পর্কে ছিল।
হ্রভোজে কুসুলজা

@ hkusulja আঘাতের জন্য অপমান যুক্ত করছে: আপনি এটির সত্যতা স্বীকার করলেও, এখনও আমি দেখতে পাচ্ছি না যে প্রশ্নটি কেবল সার্ভার-সাইড। আমি হাতিয়ার হিসাবে ঘন অনুভব করি ...
টনি গিল

4
এই লিপিটি ঘৃণ্য। আপনার সাইট হ্যাক করতে চাইলে এটি ব্যবহার করুন। সর্বদা ব্যবহারকারীর ভেরিয়েবল প্রবেশ করে পালাতে পারেন !! Output _GET সরাসরি আউটপুট করবেন না।
Charj 10

5

অথবা আপনি এটি ব্যবহার করতে পারেন http://plugins.jquery.com/project/parseQuery , এটি বেশিরভাগের চেয়ে ছোট (449 বাইটযুক্ত), নাম-মান জুটির প্রতিনিধিত্ব করে এমন একটি বস্তু প্রদান করে।


3

যে কোনও সার্ভার-সাইড ভাষার সাথে, আপনাকে জাভাস্ক্রিপ্টে পোষ্ট ভেরিয়েবলগুলি ছড়িয়ে দিতে হবে।

.NET

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

খালি মূল্যবোধ সম্পর্কে সতর্কতা অবলম্বন করুন। আপনি যে ভেরিয়েবলটি নির্গমনের চেষ্টা করছেন তা আসলে শূন্য থাকলে আপনি জাভাস্ক্রিপ্ট সিনট্যাক্স ত্রুটি পাবেন। যদি আপনি জানেন যে এটি একটি স্ট্রিং, আপনার এটি উদ্ধৃতিতে মোড়ানো উচিত। যদি এটি একটি পূর্ণসংখ্যা হয়, আপনি জাভাস্ক্রিপ্টে লাইনটি লেখার আগে এটি প্রকৃতপক্ষে উপস্থিত কিনা তা পরীক্ষা করে দেখতে চাইতে পারেন।


4
যদিও আপনার সর্বদা সার্ভার-সাইড ভাষাগুলিতে অ্যাক্সেস নেই। উদাহরণস্বরূপ গিটহাব পৃষ্ঠাগুলি ...
অ্যাডাম বি


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 প্লাগইনগুলি দুর্দান্ত বলে মনে হচ্ছে তবে আমার যা দরকার তা হ'ল get paras কে পার্স করার জন্য একটি দ্রুত js ফাংশন। আমি যা পেয়েছি তা এখানে।

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


1

যদি আপনার G _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

ইউআরএল থেকে ভারস / মান পেতে সহজ, তবে তবুও ব্যবহারযোগ্য:

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'পেতে পরিবর্তনশীল নাম।


এই কোডটি ইউটিএলগুলির মতো পছন্দ করে http://foo.com/?a=b#bar। এটি b#barএর মান বলে মনে করে a
এমএম

1

সহজবোধ্য রাখো

এর মান পেতে ভেরিয়েবলের কী দিয়ে VARIABLE_KEY প্রতিস্থাপন করুন

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

0

কেবল রেকর্ডের জন্য, আমি এই প্রশ্নের উত্তর জানতে চেয়েছিলাম, তাই আমি একটি পিএইচপি পদ্ধতি ব্যবহার করেছি:

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

এরপরে চালিত আমার সমস্ত জাভাস্ক্রিপ্ট / জ্যাকেই জেজেটসের সমস্ত কিছু অ্যাক্সেস করতে পারে। এটি একটি দুর্দান্ত মার্জিত সমাধান আমি অনুভব করি।


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]);
})();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.