Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用HTML图像请求将数据发送到服务器,或返回数据作为响应_Javascript_Asp.net_Browser Cache - Fatal编程技术网

Javascript 如何使用HTML图像请求将数据发送到服务器,或返回数据作为响应

Javascript 如何使用HTML图像请求将数据发送到服务器,或返回数据作为响应,javascript,asp.net,browser-cache,Javascript,Asp.net,Browser Cache,我正在用javascript创建一个像素图像,方法是创建图像标记并将其注入DOM 标记看起来像这样: byte[] _imgbytes = Convert.FromBase64String("R0lGODlhAQABAIAAANvf7wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="); Response.ContentType = "image/gif"; Response.AppendHeader("Content-Length", _imgbytes.Leng

我正在用javascript创建一个像素图像,方法是创建图像标记并将其注入DOM

标记看起来像这样:

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);

如您所见,此标记实际上将调用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)以javascript可以获取的方式传递回浏览器

注意事项:

  • 无法使用查询字符串,因为像素需要可缓存,如果查询字符串不同,则在后续请求中不会从浏览器缓存中提取像素(文件名将不同)
  • 无法使用Cookie,pixel请求与应用程序位于不同的根域上,并且在禁用第三方Cookie的情况下需要使用此功能
  • 无法使用AJAX,因为不想担心跨域问题

  • 使用
    http://xyz.com/pixel.aspx/your-guid-here
    。然后,只需配置您的Web服务器和/或应用程序,这样就不会导致404错误,而是执行您的aspx代码。

    我自己解决了这个问题

    我没有使用图像,而是使用远程脚本请求。因此,我的注入标签如下所示:

    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);
    

    然后,在我的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文件中)使用my guid参数执行。这使我的页面能够完全访问guid

    此外,由于请求URL从未更改,因此浏览器会正确缓存脚本


    瞧。

    页面上有多少图像?它们是否都有不同的GUID?每页只有一个图像。就缓存而言,这是否与使用查询字符串相同?不,在这种情况下,客户端看不到查询字符串,因此它被缓存。当然,如果GUID发生更改,则不会从缓存加载映像,但无论如何,这可能是您想要的方式。如果你不想这样,你可能是运气不好。不幸的是,这个想法与使用querystring没有任何不同。我希望在后续请求中,即使GUID发生更改,也能从缓存中提取像素图像。这是不可能的。不同的URL(或查询字符串)=>新请求。