2015-11-19 29 views
0

我有一個web應用程序,它使用jQuery AJAX GET請求從我的服務器注入一個基於myjavascriptfile.js文件的服務器。目前,每次客戶訪問https://www.google.co.uk時都會調用此GET請求。根據客戶端訪問URL的次數從服務器提供不同的JS文件?

但是我希望能夠發送mysecondjavascriptfile.js文件到客戶端,如果客戶端已經多到https://www.google.co.uk 10倍。

你有什麼辦法可以做到這一點嗎?

+0

你首先需要一個跟蹤機制。探索用於計算訪問次數的Cookie。然後將該cookie值包含在請求中的某個標頭中。那麼服務器端很容易。 – Brant

+0

謝謝!你能否簡單地解釋一下cookie如何讓我知道頁面是否被訪問了10次?我認爲它不會創建10個人的Cookie? – PickMeUpLittle

+0

第一次訪問時,document.cookie('visits = 1');每次有人訪問您的網站時,請檢查該cookie的實例,如果存在,請進行閱讀並做另一項分配,將其增加1。 – Brant

回答

0

首先要做的,就是堅持客戶端到站點的命中。我認爲SessionStorage可以幫助在這裏:

sessionStorage.counter = ++(sessionStorage.counter) || 0; 

var sources = { 
    lessThanTen : 'http://yourscript.com/lessthan10hits.js', 
    moreThanTen : 'http://yourscript.com/morethan10hits.js' 
} 
var script = document.createElement('script'); 

if(sessionStorage.counter >= 10){ 
    script.src = sources.moreThanTen; 
} else { 
    script.src = sources.lessThanTen; 
} 

document.getElementsByTagName('head')[0].appendChild(script); 

這當然是命中的客戶端驗證。您可以通過AJAX實現服務器端驗證,或者在10次請求後提供略微不同的HTML標記。你需要使用會話(或者簡單的cookie)來將它們保存在服務器端。

AJAX驗證:

var xhr = new XMLHttpRequest(); 
xhr.addEventListener('load', function(){ 
    var script = document.createElement('script'); 
    script.src = xhr.response; 
    document.getElementsByTagName('head')[0].appendChild(script); 
}); 
xhr.open('POST', 'http://www.urltocheckhits.com/hits'); 
xhr.send('url=' + encodeURIComponent(window.location.hostname)); 

然後從Node.js的(與身體解析器和表達會話):

var sources = { 
    lessThanTen : 'http://yourscript.com/lessthan10hits.js', 
    moreThanTen : 'http://yourscript.com/morethan10hits.js' 
} 
app.post('/hits', urlEncoded, function(req, res){ 
    if(req.body){ 
     var url = req.body.url; 
     if(!req.session.views){ 
      req.session.views = { }; 
     } 
     if(req.session.views[url]){ 
      req.session.views[url]++; 
     } else { 
      req.session.views[url] = 1; 
     } 

     if(req.session.views[url] > 10){ 
      res.send(sources.moreThanTen); 
     } else { 
      res.send(sources.lessThanTen); 
     } 
    } 
}); 

我建議你檢查express-sessionbody-parser的文檔。

請注意,您需要爲此添加CORS頭(您可以使用JSONP輕鬆完成,而不是使用XHR)。

如果您只是提供JS文件而不是執行AJAX調用,然後包括返回的腳本,可能會更容易。所以,那麼你可以只:

<script src="http://onesingleurl.com/hits"> 

緩存的行爲怪異這樣的,所以這就是爲什麼我喜歡的另一種方法。

+0

謝謝,非常有幫助。我熱衷於保持服務器端的東西。服務器端驗證會是什麼樣子? – PickMeUpLittle

+0

這取決於你在服務器端使用什麼。 – MinusFour

+0

我正在使用一個簡單的node.js與快遞:) – PickMeUpLittle

相關問題