2014-01-30 47 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.;