2012-03-03 82 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