2012-03-03 127 views
0

我正在创建一个ajax网站,我正在使用jquery的​​来加载页面。当您点击导航栏中的链接时,它可以正常工作并加载新页面,但是当您重新加载时,您会丢失刚才的页面。因此,如果我正在查看我的帐户,并重新加载该页面,它会将我发回主页。这很容易解决,但真正的问题是当我搜索或我正在加载配置文件。我的搜索网址是http://mysite.com/#!/search/option1/query here/。我在这里做了一个简单的正则表达式,但是当我尝试使用我正在使用的代码的正则表达式时,它们不会混合。我的个人资料网址是这样的http://mysite.com/#!/profile/person here/。我如何制定正则表达式来适应所有这些?我需要筛选出第一个选项(/ account /,/ search /,/ newsfeed /),根据该页面加载页面,然后根据第二个和第三个选项加载内容。继承人的代码我使用:JavaScript复杂的URL正则表达式


var oldLoc = window.location.hash.replace(/^#\!/,""); 
var m = /(\/search\/)([^\/]+\/)([^\/]+)/.exec(oldLoc); 

if (oldLoc == '/newsfeed/') { 
    $('#reload_section').load('newsfeed.php'); 
    $('.nav_itm.home').removeClass('active'); 
    $('.nav_itm.account').removeClass('active'); 
    $('.nav_itm.newsfeed').addClass('active'); 
    _currentScreen = 4; 
} else if (oldLoc == '/account/') { 
    $('#reload_section').load('account.php'); 
    $('.nav_itm.home').removeClass('active'); 
    $('.nav_itm.account').removeClass('active'); 
    $('.nav_itm.newsfeed').removeClass('active'); 
    _currentScreen = 5; 
}/*else if (m[1]) { 
    $('#reload_section').load('search.php'); 
    $('.nav_itm.home').removeClass('active'); 
    $('.nav_itm.account').removeClass('active'); 
    $('.nav_itm.newsfeed').removeClass('active'); 
    _currentScreen = 6; 
    if (m[2] == 'option1/') { // Option1 Search 
     searchMenuId = 1; 
     $('.cquery .option1').addClass('active'); 
     $('.cquery .option2').removeClass('active'); 
     $('div.live h1 b').text(m[2]); 
    } else if (m[2] == 'option2/') { // Option2 Search 
     searchMenuId = 2; 
     $('.cquery .option1').removeClass('active'); 
     $('.cquery .option2').addClass('active'); 
     $('div.live h1 b').text(m[2]); 
    } 
} */else { 
    $('#reload_section').load('main.php'); 
    $('.nav_itm.home').addClass('active'); 
    $('.nav_itm.account').removeClass('active'); 
    $('.nav_itm.newsfeed').removeClass('active'); 
    _currentScreen = 1; 
} 

该代码工作完美上固定的网页网址像http://mysite.com/#!/newsfeed/因为没有选择。如果甚至有可能,我该如何修改它来处理正则表达式。我不确定但是我问得太多了?我宁愿不使用PHP的URL路由,但如果JavaScript无法做我想要的,我可能不得不。非常感谢你提供任何帮助。我知道我在这里问很多。

回答

1

如果你试图做的是分析你的网址,获取所有的#后的各种选项!你可以使用这样的代码:

var str = "http://mysite.com/#!/search/option1/query here/"; 
var options; 
var pos = str.indexOf("#!"); 
if (pos != -1) { 
    options = str.substr(pos + 2).replace(/^\/|\/$/g, "").split("/"); 
    console.log(options); // ["search", "option1", "query here"] 
} 

你可以看到它在这里工作:http://jsfiddle.net/jfriend00/e9a5V/

然后,您可以适当地处理选项数组。

switch(options[0]) { 
    case "search": 
     // code to handle search here 
     // additional options are in options[1], options[2] ... 
     // up to options[options.length - 1] 
     break; 

    case "profile": 
     // code to handle profile here 
     // additional options are in options[1], options[2] ... 
     break; 

    case "newsfeed": 
     // code to handle newsfeed and options here 
     // additional options are in options[1], options[2] ... 
     break; 

    default: 
     // code to handle unexpected URL form here 
} 
+0

谢谢,我一直在寻找这样的一段时间,但不可能对谷歌 – 2012-03-03 16:20:49

+0

发现任何所以我修改了它为我所用,但它给我的错误:'类型错误:“未定义”是不是一个函数(评估'window.location.indexOf(“#!”)')'。这是这行:'var str = window.location;'。我如何解决这个问题? – 2012-03-03 17:02:57

+1

@JosephTorraca - 这可能是因为window.location不是一个字符串对象,所以它没有'.indexOf()'方法。你可以使用'window.location.href'(这是一个字符串),或者你可以指定'var str = window.location.href;'并使用'str'作为你的初始变量。 – jfriend00 2012-03-03 17:07:18