2

I found a nice little script on snippr(http://snipplr.com/view.php?codeview&id=799) that gives me the GET variables in an associative array.

// Read a page's GET URL variables and return them as an associative array.
function getUrlVars()
{
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');

    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }

    return vars;
}

var get = getUrlVars(); 

I am trying to check to see if a certain GET variable is set and if the value is 'search'. For some reason my code is not catching the If statement and alerting even if the condition is not met.

if((get['search_housing']) = 'search') {
  alert('this works');
}

I'm not sure why it's not respecting my If statement. Is there something wrong with my code?

1
  • 1
    Tip: Look for a proper query string parser that performs URL-decoding. Perhaps: gist.github.com/143101 Commented Jan 29, 2012 at 7:04

5 Answers 5

5

The = operator sets the value.

You're looking for ==, which compares values:

if((get['search_housing']) == 'search') {
  alert('this works');
}
0
0

if((get['search_housing']) == 'search') {

DOUBLE equals!

0

Maybe it needs to be this:

if((get['search_housing']) == 'search') {
    alert('this works');
}

See, the = would mean you are trying to assign 'search' to the get[].

0
if(get('search_housing')==='search'){
  alert('test');
}
0

Try gup instead. That code you found doesn't look very robust. You probably want to unescape the returned value because you are comparing the results.

if (gup('search_housing') == 'search') { ... }

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];
}
3
  • No query string parser is robust without URL-decoding. Commented Jan 29, 2012 at 7:03
  • @AtesGoral - made a note about unescaping, although personally I always do this outside the value retrieval because I want the encoded value. Commented Jan 29, 2012 at 17:07
  • I can see fringe cases where you might want to do that, but in general, not handling unescaping in your parser is a violation of layers. Commented Jan 29, 2012 at 19:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.