استخدام معلمة GET لعنوان URL في JavaScript [نسخة مكررة]

StackOverflow https://stackoverflow.com/questions/827368

  •  05-07-2019
  •  | 
  •  

سؤال

هذا السؤال لديه بالفعل إجابة هنا:

إذا كنت على صفحة مثل

http://somesite.com/somepage.php?param1=asdf

في JavaScript لتلك الصفحة، أرغب في تعيين متغير لقيمة المعلمة في جزء GET من عنوان URL.

لذلك في جافا سكريبت:

<script>
   param1var = ...   // ... would be replaced with the code to get asdf from URI
</script>

ماذا سيكون؟

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

المحلول

وهنا بعض عينة من الرموز من أجل هذا.

<script>
var param1var = getQueryVariable("param1");

function getQueryVariable(variable) {
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  for (var i=0;i<vars.length;i++) {
    var pair = vars[i].split("=");
    if (pair[0] == variable) {
      return pair[1];
    }
  } 
  alert('Query Variable ' + variable + ' not found');
}
</script>

نصائح أخرى

يمكنك الحصول على جزء "البحث" من كائن الموقع - ثم تحليله.

var matches = /param1=([^&#=]*)/.exec(window.location.search);
var param1 = matches[1];

لقد قمت بإنشاء هذا الاختلاف في حل gnarf، لذا فإن الاستدعاء والنتيجة مشابهان لـ PHP:

function S_GET(id){
    var a = new RegExp(id+"=([^&#=]*)");
    return decodeURIComponent(a.exec(window.location.search)[1]);
}

ولكن نظرًا لأن استدعائها في دالة يؤدي إلى إبطاء العملية، فمن الأفضل استخدامها على أنها عالمية:

window['var_name'] = decodeURIComponent( /var_in_get=([^&#=]*)/.exec(window.location.search)[1] );

تحديث

نظرًا لأنني ما زلت أتعلم JS، فقد قمت بإنشاء إجابة أفضل في سلوك JS أكثر:

Url = {
    get get(){
        var vars= {};
        if(window.location.search.length!==0)
            window.location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value){
                key=decodeURIComponent(key);
                if(typeof vars[key]==="undefined") {vars[key]= decodeURIComponent(value);}
                else {vars[key]= [].concat(vars[key], decodeURIComponent(value));}
            });
        return vars;
    }
};

وهذا يسمح أن يتم استدعاؤه فقط باستخدام Url.get.

مثالعنوان URL ?param1=param1Value&param2=param2Valueيمكن أن يسمى مثل:

Url.get.param1 //"param1Value"
Url.get.param2 //"param2Value"

هنا مقتطف:

// URL GET params
url = "?a=2&a=3&b=2&a=4";

Url = {
    get get(){
        var vars= {};
        if(url.length!==0)
            url.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value){
                key=decodeURIComponent(key);
                if(typeof vars[key]==="undefined") {vars[key]= decodeURIComponent(value);}
                else {vars[key]= [].concat(vars[key], decodeURIComponent(value));}
            });
        return vars;
    }
};

document.querySelector('log').innerHTML = JSON.stringify(Url.get);
<log></log>

من أرشيف البرمجة الخاص بي:

function querystring(key) {
   var re=new RegExp('(?:\\?|&)'+key+'=(.*?)(?=&|$)','gi');
   var r=[], m;
   while ((m=re.exec(document.location.search)) != null) r[r.length]=m[1];
   return r;
}

إذا كانت القيمة غير موجودة، فسيتم إرجاع مصفوفة فارغة.
إذا كانت القيمة موجودة، فسيتم إرجاع مصفوفة تحتوي على عنصر واحد، وهو القيمة.
في حالة وجود عدة قيم بالاسم، يتم إرجاع مصفوفة تحتوي على كل قيمة.

أمثلة:

var param1var = querystring("param1")[0];

document.write(querystring("name"));

if (querystring('id')=='42') alert('We apoligize for the inconvenience.');

if (querystring('button').length>0) alert(querystring('info'));

وإليك كيفية القيام بذلك في Coffee Script (فقط إذا كان أي شخص مهتمًا).

decodeURIComponent( v.split( "=" )[1] ) if decodeURIComponent( v.split( "=" )[0] ) == name for v in window.location.search.substring( 1 ).split( "&" )

باستخدام مسج؟لقد استخدمت هذا من قبل: http://projects.allmarkedup.com/jquery_url_parser/ وقد عملت بشكل جيد.

بدا هذا جيدًا:

function gup( name ){
   name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
   var regexS = "[\\?&]"+name+"=([^&#]*)";
   var regex = new RegExp( regexS );
   var results = regex.exec( window.location.href );
   if( results == null )
      return "";
   else
      return results[1];
}

من http://www.netlobo.com/url_query_string_javascript.html

إليك الإصدار الذي يحبه JSLint:

/*jslint browser: true */
var GET = {};
(function (input) {
    'use strict';
    if (input.length > 1) {
        var param = input.slice(1).replace(/\+/g, ' ').split('&'),
            plength = param.length,
            tmp,
            p;

        for (p = 0; p < plength; p += 1) {
            tmp = param[p].split('=');
            GET[decodeURIComponent(tmp[0])] = decodeURIComponent(tmp[1]);
        }
    }
}(window.location.search));

window.alert(JSON.stringify(GET));

أو إذا كنت بحاجة إلى دعم لعدة قيم لمفتاح واحد مثل على سبيل المثال.?key=value1&key=value2 يمكنك استخدام هذا:

/*jslint browser: true */
var GET = {};
(function (input) {
    'use strict';
    if (input.length > 1) {
        var params = input.slice(1).replace(/\+/g, ' ').split('&'),
            plength = params.length,
            tmp,
            key,
            val,
            obj,
            p;

        for (p = 0; p < plength; p += 1) {
            tmp = params[p].split('=');
            key = decodeURIComponent(tmp[0]);
            val = decodeURIComponent(tmp[1]);
            if (GET.hasOwnProperty(key)) {
                obj = GET[key];
                if (obj.constructor === Array) {
                    obj.push(val);
                } else {
                    GET[key] = [obj, val];
                }
            } else {
                GET[key] = val;
            }
        }
    }
}(window.location.search));

window.alert(JSON.stringify(GET));

يمكنك استخدام هذه الوظيفة

function getParmFromUrl(url, parm) {
    var re = new RegExp(".*[?&]" + parm + "=([^&]+)(&|$)");
    var match = url.match(re);
    return(match ? match[1] : "");
}

إذا كنت تقوم بالفعل بتشغيل صفحة PHP ثم

بت PHP:

    $json   =   json_encode($_REQUEST, JSON_FORCE_OBJECT);
    print "<script>var getVars = $json;</script>";

بت شبيبة:

    var param1var = getVars.param1var;

لكن بالنسبة لصفحات HTML، يبدو حل خوسيه باسيليو جيدًا بالنسبة لي.

حظ سعيد!

لا تحتاج إلى القيام بأي شيء خاص، في الواقع.يمكنك مزج JavaScript وPHP معًا للحصول على المتغيرات من PHP مباشرة إلى JavaScript.

var param1val = '<?php echo $_GET['param1'] ?>';
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top