2012-04-03 7 views
2

Ich weiß, dass diese Frage zuvor gestellt wurde, aber ich hatte Probleme mit allen bisher geposteten Lösungen. Ich habe eine URL, die wie folgt aussieht:Zugriff GET Variablen mit jQuery/Javascript

http://localhost:3000/virgil/1/render_lesson?toggle=view 

Es ist ein Rails durch AJAX nennen, aber das sollte keine Rolle spielen. Jedes Mal, wenn ich eine Funktion ausprobiere, die die Variable für "toggle" bekommen soll, bekomme ich "undefined", wenn ich sie in das Konsolenprotokoll drucke. Ich habe diese Funktion versucht

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; 
} 

Und wenn ich console.log(getUrlVars()); nenne ich bekommen ["http://localhost:3000/"]

Aber wenn ich console.log(getUrlVars()["toggle"]); rufen ich einfach undefined

ich jede Hilfe dankbar!

EDIT:

Hinzufügen der relevanten Teile meines Codes. Dies ist eine Rails-Anwendung, die den Anruf mit AJAX durchführt.

<%= link_to 'View Lessons', render_lesson_virgil_path(course, :toggle => :view), :remote => true, :class => 'toggle_lesson', :id => "toggle_lesson#{course.id}" %>

Und dann in der JavaScript-Datei, die es nennt:

function $_GET(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]; 
} 

console.log($_GET('toggle')); //This is where it prints the incorrect value to the log, regardless of the function I use. 

$("#Course<%= @course.id %>").append('<div id="Lesson<%= @course.id %>" class="render_lesson"></div>'); 
$("#Lesson<%= @course.id %>").html("<%= escape_javascript(render(:partial => "lesson")).html_safe %>"); 
+0

möglich Duplikat [wie mit JQuery GET und POST-Variablen zu bekommen?] (Http://stackoverflow.com/questions/439463/how-to-get-get -and-post-variables-with-jquery) – Bozho

+0

und http://stackoverflow.com/questions/1403888/get-url-parameter-with-jquery – Bozho

+0

Ich habe Ihre Funktion so geändert, dass sie eine URL-Zeichenfolge akzeptiert, anstatt sie aus dem Fenster zu ziehen .Lage. Ich habe deine URL als String eingegeben und es hat für mich funktioniert. Ich habe ein Array mit einem "Toggle" -Taster und einem "View" -Wert bekommen. – SuperJumbo

Antwort

3

Dies ist die JS-Funktion I für Query-Strings verwenden - hoffentlich hilft es Ihnen.

function getParameterByName(name) { 
var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search); 
return match && decodeURIComponent(match[1].replace(/\+/g, ' ')); 
} 
+0

Dies scheint das gleiche Problem zu haben. Wenn ich 'console.log (getParameterByName ('toggle')) rufe:' Ich bekomme 'null' anstelle des richtigen Wertes. – Rhawb

+0

Es funktioniert für mich. –

0

Versuchen Sie, diese (i nur geänderte Linie 4 - "var Hashes ..."):

function getUrlVars() 
{ 
    var vars = [], hash;  
    var hashes = window.location.href.valueOf().split('?').slice(1)[0].split('&'); 
    for(var i = 0; i < hashes.length; i++) 
    { 
     hash = hashes[i].split('='); 
     vars.push(hash[0]); 
     vars[hash[0]] = hash[1]; 
    } 
    return vars; 
} 
-2

ich bin mit meiner 1 von Projekten ..

function $_GET(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]; 
} 

sieht aus wie PHP $_GET[''] ... weil ich PHP liebe:

Anwendungsbeispiel:

URL: index.php?page=newone&id=4&cat=15

Javascript: alert($_GET('page')); // newone

+0

Es ist seltsam, wenn ich das auf console.log drucke ich bekomme '(eine leere Zeichenfolge)' – Rhawb

+0

@Rhawb: Ich habe es jetzt wieder getestet .. es funktioniert für mich .. können Sie mir Ihren Code zeigen .., dass Sie sind using ... – Shahrukh

+0

Ich habe meinen Code auf dem ursprünglichen Posting gepostet. Vielen Dank! – Rhawb