2014-01-30 45 views
0

所以我有一個問題,我試圖理清,而且我只在一年之內做了開發工作,所以對我來說事情還是很新的。我的目標是創建一個腳本,它能夠在url中找到utm值(如果存在),然後將它們存儲到變量中(如果存在)。我已經得到了一個腳本的工作,但如果該URL在一個非常特殊的方式構建它才能正常運行,高級網址查詢

本地主機/?utm_source =谷歌& utm_medium =中共中央& utm_campaign =(投資回報率)+ CDN +一般&的utm_content = CDN +(短語+%26 +寬峯)& utm_term = CDN &的gclid = CNaV2vnZl7wCFY57QgodbgwA7A

這可能是多種在實際生產中,例如URL的 - ?

本地主機/ utm_source =谷歌& utm_medium = CPC & utm_campaign =(ROI)+ CDN +一般 本地主機/ utm_source =谷歌& utm_medium = CPC & utm_campaign =(ROI)+ CDN +一般&的utm_content = CDN + (短語+%26 +寬)& utm_term = cdn

這是我放到一起的代碼。如果你對如何讓它在任何情況下都能更好地工作有什麼建議,或者任何你會推薦給「高級新手」的資源,我都會非常感激!

var urlSearch = window.location.search; 

     if (urlSearch.length > 1) { 

     if (urlSearch.match('utm_source=(.*)&utm_medium')) { 
      var utmSource = urlSearch.match('utm_source=(.*)&utm_medium')[1]; 
     } 

     if (urlSearch.match('utm_medium=(.*)&utm_campaign')) { 
      var utmMedium = urlSearch.match('utm_medium=(.*)&utm_campaign')[1]; 
     } 

     if (urlSearch.match('utm_campaign=(.*)&utm_content')) { 
      var utmCampaign = urlSearch.match('utm_campaign=(.*)&utm_content')[1]; 
     } 

     if (urlSearch.match('utm_content=(.*)&utm_term')) { 
      var utmContent = urlSearch.match('utm_content=(.*)&utm_term')[1]; 
     } 

     if (urlSearch.match('utm_term=(.*)&')) { 
      var utmTerm = urlSearch.match('utm_term=(.*)&')[1]; 
     } 

    } 
+0

看看我寫的這篇文章。它會將查詢字符串中的所有變量完全解析爲一個JavaScript對象。 Stack Overflow上還有其他代碼示例。 http://www.htmlgoodies.com/beyond/javascript/article.php/11877_3755006_2/How-to-Use-a-JavaScript-Query-String-Parser.htm –

回答

0

您的方法的具體問題是查詢字符串不保證以特定的順序。因此,如果瀏覽器或上一頁中的任何更改導致查詢字符串變量以不同順序提交,您的代碼將停止工作。還有一些其他問題,其中只有一個是解碼任何空間或複雜的值。

使用查詢字符串解析器,像這樣的例子:

<title>JavaScript Form Processor</title> 


<script> 
function ptq(q) 
{ 
    /* parse the query */ 
    /* semicolons are nonstandard but we accept them */ 
    var x = q.replace(/;/g, '&').split('&'), i, name, t; 
    /* q changes from string version of query to object */ 
    for (q={}, i=0; i<x.length; i++) 
    { 
     t = x[i].split('=', 2); 
     name = unescape(t[0]); /* unescape can and should be replaced with decodeURIComponent() for almost all browsers */ 
     if (!q[name]) 
      q[name] = []; 
     if (t.length > 1) 
     { 
      q[name][q[name].length] = unescape(t[1]); 
     } 
     /* next two lines are nonstandard */ 
     else 
      q[name][q[name].length] = true; 
    } 
    return q; 
} 

function param() { 
    return ptq(location.search.substring(1).replace(/\+/g, ' ')); 
} 
q = param(); 

firstname = q.name1; 
/* use q['name1'] syntax to access more complicated variables from the query string */ 
document.write('<h1>Hello ', firstname || 'Anonymous', '!</h1>'); 
</script> 
<form> 
Type your first name: <input type="text" name="name1" /> 
<input type="submit" value="Submit" /> 
</form> 

爲了解析,你在你的問題提的變量,您只需將使用在上面的腳本創建的q變量,訪問其屬性:

 var utmSource = q.utm_source, utmMedium = q.utm_medium, etc.;