2012-04-03 40 views
2

我知道这个问题之前已经被问过了,但是到目前为止我发布的所有解决方案都遇到了问题。我有一个像这样的网址:使用jQuery/Javascript访问GET变量

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

这是一个Rails通过AJAX调用,但这应该不重要。每次我尝试一个应该得到“切换”变量的函数时,我将其打印到控制台日志中时会得到“未定义”。我曾尝试这个功能

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

当我打电话console.log(getUrlVars());我得到["http://localhost:3000/"]

但是,当我打电话console.log(getUrlVars()["toggle"]);我只是得到undefined

我明白任何帮助!

编辑:

添加我的代码的相关部分。这是一个Rails应用程序,它使用AJAX进行调用。

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

然后,它调用javascript文件:

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

可能重复[如何获得与jQuery GET和POST变量?](http://stackoverflow.com/questions/439463/how-to-get-get - 和后变量与jQuery) – Bozho 2012-04-03 21:34:06

+0

和http://stackoverflow.com/questions/1403888/get-url-parameter-with-jquery – Bozho 2012-04-03 21:34:22

+0

我改变你的函数接受一个URL字符串,而不是从窗口抓取它。位置。我把你的URL作为一个字符串推入,它对我有用;我得到了一个具有“切换”键和“查看”值的数组。 – SuperJumbo 2012-04-03 22:14:12

回答

3

这是JS功能,我使用的查询字符串 - 希望它可以帮助你。

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

这似乎有相同的问题。当我调用'console.log(getParameterByName('toggle'));'我得到'null'而不是正确的值。 – Rhawb 2012-04-03 21:52:34

+0

它适合我。 – 2013-07-06 14:31:23

0

试试这个(我只改变的线4 - “VAR哈希...”):

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

我使用它在我的项目1项..

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

看起来像PHP $_GET[''] ...因为我爱PHP:D

用法示例:

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

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

+0

奇怪的是,当我打印到console.log时,我得到了'(一个空字符串)' – Rhawb 2012-04-03 23:48:06

+0

@Rhawb:我现在再次测试它..它正在为我工​​作..你能告诉我你的代码..你是使用... – Shahrukh 2012-04-03 23:57:48

+0

我已经发布我的代码在原始发布。谢谢! – Rhawb 2012-04-03 23:59:49