2010-07-21 47 views
0

我有一些代碼依賴於jQuery的是在這裏工作:jQuery函數創建與沒有圖書館問題

$(function() { 


var referrer = document.referrer; 
    var dataText = 'client='+client+'&referrer='; 
    dataText = dataText + referrer; 

    // Create the AJAX request 
    $.ajax({ 
     type: "GET",     
     url: "http://www.myurl.com/project/thecollector.php",    
     data: dataText,     
     success: function() {    
      $('#complete').html('Your page view has been added!'); 
     } 
    }); 
}); 

我已經重寫了代碼,不需要jQuery的位置:

window.addEventListener('domready', function() 
{ 
var referrer = document.referrer; 
    var dataText = 'client='+client+'&referrer='; 
    dataText = dataText + referrer; 

if (window.XMLHttpRequest)   
{ 
    // code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp = new XMLHttpRequest();  
} 
else   
{ 
    // code for IE6, IE5 
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");   
} 
var url = "http://www.myurl.com/project/thecollector.php?"+dataText;   
xmlhttp.open("GET",url,false);   
xmlhttp.send(null);  
}); 

這個問題我我所知道的是,jquery代碼總是將信息捕獲到我正在尋找的服務器上,但後者只是每隔一段時間就捕獲一次,並且感覺看起來像是隨機的。有沒有辦法強制它的函數調用,並且我嘗試了onload,它也不起作用。

回答

1

「domready」不是一個事件,所以我很驚訝這個作品。例如,在Mozilla和Opera中,它應該是DOMContentLoaded。你確定它不工作只是因爲有時document.referrer是空的,有時它不是?

如果你只是把代碼放在<script>塊(最好在外部文件中)並將其放在結束標記之前,那將會非常簡單。然後它會在DOM準備就緒時運行,並且不會發生事件。這應該工作得很好。

最後,這看起來最好在服務器端完成,就像PHP一樣,您還可以訪問HTTP引用鏈接。然後,您可以直接將結果輸出到HTML中。此外,您還可以使用NoScript或僅使用JavaScript瀏覽來查看此內容。

+0

對不起,我沒有包括所有的代碼,但這實際上是動態插入到網頁上,並託管在服務器端。它將代碼插入頁面的頭部,但插入它的原始js坐在正文標籤的正上方。我也試過window.onload = function()無濟於事。 – mdubulous 2010-07-21 20:28:59

+0

然後你不應該把它插入頭部。爲什麼不把它插入身體?另外,如果你在DOM加載後將它插入頭部,那麼你不需要添加任何監聽器來等待DOM加載 - 它已經加載了! – Rafael 2010-07-21 20:35:41