2011-11-04 133 views
3

我試圖用$ .get()聯繫服務器。我不在乎迴應。我的目的是記錄有關用戶操作的數據(他們點擊了什麼等)。當用戶點擊某個東西時,$ .get被這樣調用:發送GET請求到HTTP服務器;不關心響應

$.get(
     "http://www.some-server.com/log.txt?click=1", 

     function (data) 
     { 
     }, 

     "text" 
); 

服務器處理相應的請求。我收到以下錯誤,當函數執行:

XMLHttpRequest cannot load ... is not allowed by Access-Control-Allow-Origin. 

如果我改變的數據類型,以JSONP,我沒有得到錯誤,但在jQuery的回調試圖評估爲JSON日誌服務器的響應,它告訴我「whateverwasreturned 「 沒有定義。我無法更改日誌服務器上的任何內容。

+0

服務器是否返回任何數據?你說你不關心這個反應,有點混淆你的目標是在這裏。 –

+0

你見過這個問題嗎?http://stackoverflow.com/questions/3595515/xmlhttprequest-error-origin-null-is-not-allowed-by-access-control-allow-origin – Nathan

回答

6

使用 「跟蹤像素」 技術,而不是:

<img src="http://www.some-server.com/log.txt?click=1" height="1" width="1"> 

需要時只需插入HTML到DOM。

+1

確保你檢查你的頁面是否處理https,你需要更改src attr爲https以及(如果只有該網站有ssl) – ysrb

+0

我使用方法$(「body」)。append(「」),並看到ping在wireshark爲第一個行動,但不是任何後續行動。 – SemperFly

+1

您需要「加鹽」URL以中斷緩存。 使用?click = 1&now =「+ new Date() –

0

不確定你是否可以......如果你正在與自己的服務器通信,那麼告訴JS將響應視爲純文本而不嘗試解碼它是很簡單的。但是一旦你在做JSONP,那麼jquery實際上只是構建一個<script src="http://otherserver.com"></script>塊並插入它,這意味着這意味着遠程服務器必須迴應有效的JS代碼。

一種替代方法是加載包含您的json p url的圖像。圖像本身會「破碎」,但仍會觸發GET請求。

1

如果你使用jQuery,只需添加一個腳本標記,以避免同樣的原產地政策問題:

$('body').append('<script src="http://www.some-server.com/log.txt?click=1"></script>'); 
0

你可以繼續使用JSONP,但是讓你的log.txt返回一個空的JSON對象:{}

0

您可以使用純Ajax調用:

$.ajax({ 
    url: 'http://www.some-server.com/log.txt?click=1', 
    dataType: 'jsonp', 
    crossDomain: true, 
    success: function(data) { /* do nothing */ } 
}); 
+0

感謝您的迴應。這仍然導致「返回」未定義的錯誤。 – SemperFly

相關問題