2011-10-14 120 views
3

http://www.dinomuhic.com/2010/index.php頁面加載SHOWREEL身體是這樣的:傳遞價值JS功能

<body onLoad="sndReq('96')"> 

96是在該SHOWREEL的ID SQL庫。 JS函數「sndReq」是一個使用JQuery的AJAX調用,它打開請求的項目並將其顯示在主窗口中。

現在我的問題:如果我想發送一個鏈接到一個客戶端,直接打開一個特定的項目,所以他不必瀏覽網站?

http://www.dinomuhic.com/2010/index.php?sndReq=234東西(當然,現在不和只是工作打開SHOWREEL,可能是因爲體內標記在onLoad覆蓋它)

我如何能實現呢?我希望能夠通過URL打開特定項目,但如果沒有任何內容通過URL傳遞,應始終打開項目96.

在此先感謝您。我相信它很容易,我只是看不到它。

克萊圖斯

回答

5

您需要解析查詢字符串。我發現處理查詢字符串的最簡單方法是執行以下操作。首先,你需要提取從URL查詢字符串:

var queryStr = window.location.search; // will give you ?sndReq=234 

然後,您可以取出?和每個查詢字符串參數分成數組:

var paramPairs = queryStr.substr(1).split('&'); 

現在你可以建立一個組成查詢字符串名稱/值對的哈希表對象:

var params = {}; 
for (var i = 0; i < paramPairs.length; i++) { 
    var parts = paramPairs[i].split('='); 
    params[parts[0]] = parts[1]; 
} 

在你onload,你現在可以正是如此使用參數:

sndReq(params.sndReq); 

確保代碼在您的文檔的head一個腳本中運行,從而執行onload之前,它的計算。

+0

如果字符串包含hash#會怎麼樣? –

+1

這將在'window.location.hash'中,不包含在'window.location.search'中。 – Jacob

+0

非常感謝。 –

4

如果你正在使用jQuery,爲什麼不使用DOM就緒處理不是onload?在那個筆記上,如果它只是一個ajax請求,你甚至不需要等待DOM準備就緒。如果解析查詢,您應該能夠將它傳遞給您的現有函數。

// Wait for DOM-ready, may not be needed if you are just 
// making a request, up to you to decide :) 
$(function() { 
    // window.location.search represents the query string for 
    // current URL, including the leading '?', so strip it off. 
    var query = window.location.search.replace(/^\?/, ""); 

    // If there is no query, default to '96' 
    if (!query) { 
     query = '96'; 
    } 

    // Call existing function, passing the query value 
    sndReq(query); 
}); 

希望有幫助!乾杯。

+0

嘿謝謝,我明白如何用Query調用替換我的onLoad在body標籤中。但其餘的不起作用。給我留下一個沒有顯示項目的頁面。我必須在哪裏放置整個功能?還是足以將我們的函數中的所有東西放入我的window.ready函數中? – Cletus

+0

您應該可以將該函數放置在head標籤中,或者將該函數中的代碼添加到另一個DOM準備好的處理程序中(如果您已有的話)。如果你在調用'sndReq'前做'console.log(query)',它是否有你期望的值? – keeganwatkins

+0

我把它放到window.ready函數中就像這樣'var queryStr = window.location.search; var paramPairs = queryStr.substr(1).split('='); var query = paramPairs [1]; if(!query){query}''='96'; } sndReq(query);'它工作。非常感謝 – Cletus

1

您可以使用RegExp來完成此操作,讀取url參數並將它們傳遞給ajax。

這個簡單的腳本將讀取當前的URL並通過正則表達式過濾您指定的參數。

  • EG:ThisReq = gip('sndReq');從url中獲取sndReq和值。

<script language="javascript"> 
    function gip(name) { 
     name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); 
     var regexS = "[\\?&]" + name + "=([^&#]*)"; 
     var regex = new RegExp(regexS); 
     var results = regex.exec(window.location.href); 
     if (results == null) 
      sndReq('96'); 
     else 
      return results[1]; 
    } 
    // parameter pulled from url. 
    ThisReq = gip('sndReq'); 
    // executes function sndReq(); 
    sndReq(''+ThisReq+''); 
</script> 

+1

'window.location.search'已經有了這個值(它比手動解析更可靠)。另外,如果不需要它們,爲什麼要添加額外的全局變量('gip'和'ThisReq')? – keeganwatkins

+0

我在我的情況下添加了這些全局變量,因爲我有超過9個參數要過濾,都是動態的。我想我只是不知道更好的方法。 'pfWidth = gup('width'); pfHeight = gup('height'); pfThumbs = gup('Thumbs'); pfThumbSize = gup('ThumbSize'); pftheURL = gup('theURL'); pfAppID = gup('AppID'); pftheID = gup('theID'); pfDefault = gup('SetDefault'); pfAlbum = gup('DefaultAlbum');' –