2012-08-09 40 views
2

我在javascript中創建一個像素圖像,方法是創建圖像標記並將其注入到DOM中。如何使用HTML圖像請求將數據發送到服務器,或返回數據作爲迴應

標籤看起來是這樣的:

<img style="height:0;visibility:hidden;display:none;" src="http://xyz.com/pixel.aspx">

正如你所看到的,這個標籤會實際調用一個ASP.Net頁面,這將做一些處理和回寫這樣的像素:

byte[] _imgbytes = Convert.FromBase64String("R0lGODlhAQABAIAAANvf7wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="); 
Response.ContentType = "image/gif"; 
Response.AppendHeader("Content-Length", _imgbytes.Length.ToString()); 
Response.Cache.SetLastModified(DateTime.Now); 
Response.Cache.SetCacheability(HttpCacheability.Public); 
Response.BinaryWrite(_imgbytes); 

我需要的是一種方法,無論是通過一小片數據的(在像素請求之前的JavaScript生成的GUID值)發送到服務器或通過在所述像素的aspx代碼生成一些數據(不同的GUID )回到額頭ser以某種方式可以通過javascript獲取。

注意事項:

  1. 不能使用查詢字符串,因爲像素必須是可緩存的,如果查詢字符串是不同的像素不會從瀏覽器緩存(文件名會有所不同)拉在後續請求。
  2. 無法使用cookie,像素請求位於與應用程序不同的根域,並且在禁用第三方cookie的情況下需要此功能。
  3. 無法使用AJAX,因爲不想擔心跨域問題
+0

頁面上有多少圖片?他們會有不同的指導嗎? – 2012-08-09 22:05:09

+0

每頁只有一個圖像。就緩存而言, – EkoostikMartin 2012-08-09 22:07:16

回答

0

我自己解決了這個問題。

而不是一個圖像,我去了一個遠程腳本請求。所以我注入標籤如下所示:

<script async src="http://xyz.com/tracking.aspx"></script>

然後,在我的aspx,我有以下幾點:

string script = "(function(){Complete('" + guidValue + "');})();"; 

Response.ContentType = "application/javascript"; 
Response.Cache.SetLastModified(DateTime.Now); 
Response.Cache.SetCacheability(HttpCacheability.Public); 
Response.Write(script); 

當響應返回給瀏覽器,該Complete方法(駐留在已經由頁面加載的JavaScript文件)使用我的guid參數執行。這使我的頁面可以完全訪問guid。

另外,由於請求URL永不改變,所以腳本被瀏覽器正確地緩存。

Voila。

0

使用http://xyz.com/pixel.aspx/your-guid-here。那麼這只是配置你的web服務器和/或應用程序的問題,所以它不會導致404錯誤,但會執行你的aspx代碼。

+0

不會像使用查詢字符串一樣嗎? – 2012-08-09 22:09:08

+0

不,在這種情況下,客戶端看不到查詢字符串,因此它被緩存。當然,如果GUID改變,圖像不會從緩存中加載,但這可能是您想要的方式。如果你不希望你可能不走運。 – ThiefMaster 2012-08-09 22:10:33

+0

不幸的是,這個想法的行爲與使用查詢字符串的行爲不同。我希望即使GUID改變,像素圖像也能從後續請求的緩存中提取。 – EkoostikMartin 2012-08-09 22:26:43

相關問題