【问题标题】:Ajax, subdomains, 200 response, and images -- ok?Ajax、子域、200 响应和图像——好吗?
【发布时间】:2010-11-19 14:20:00
【问题描述】:

这是一个与AJAX, Subdomains and the 200 OK response(和JavaScript Same Origin Policy - How does it apply to different subdomains?)非常相似的问题,但有所不同。我的情况是:

  • 域 (www.example.com)
  • 子域中的页面 (sd.example.com/cat/id)
  • 需要向另一个子域 (cdn.example.com) 发出 ajax 样式请求

与上述问题相反,我要求的是图像。

  • GET 图像请求(使用 jQuery $.load())

这似乎工作得很好。因为它工作得很好,当有人指出它在 Firebug 中产生错误时,我并没有立即想到同源策略。

  • 图像 ARE 在 localhost 加载(test.sd.example.com/cat/id 的 apache VirtualHost url)

但是,由于我链接的那个问题,现在我想到了它,我担心这在生产中不会可靠地工作。

  • 会继续在生产环境中工作吗?它能否可靠地跨浏览器工作?

答案:不——它只是看起来像它在工作;不是真的

  • 如果没有,我该如何解决? (我不认为我可以 JSONP 图像...可以吗?)

答案:继续设置图片的src,等到加载事件触发后才显示。

  • 如果是这样,如何停止 Firebug 错误?如果我能。 (他们吓坏了其他开发人员。)

Answer: 同上——去掉实际对图像文件进行 GET 请求的步骤。

初始代码

function(imageUrl, placeTarget){
 var i = new Image();
 var img = $(i);
 img.hide()
 .load(imageUrl, function(e){
  // console.log("loadImage: loaded");
  placeTarget.attr("src", imageUrl);
  return true;
 })
 .error(function(){
  // error handling - do this part
  // console.log("loadImage: error");
  return false;
 });
 return;
} // loadImage

【问题讨论】:

  • 想要获取图像数据而不是使用 的原因是什么?
  • 因为该页面有一个幻灯片,其图像的平均总大小为 375kb(但最大为 2mb)。当轮到幻灯片放映时加载图像似乎不是最佳选择。而且,不,没有缩略图。 (所以我可以正常使用 作为拇指,然后在点击时将全尺寸图像加载到 iframe 中)。而且,是的,我认为这很愚蠢。而且,不,我对此无能为力。我想我可以在

标签: ajax image firebug same-origin-policy jquery-load


【解决方案1】:

为什么不通过创建图像元素并设置 src 来将图像插入页面。还有什么更简单的?

编辑:...通过 javascript

我不确定这是否完全正确,但在 jquery 中:

img = $('<img>');
img.attr('src', 'http://somewhere.com/some_image.jpg');
$('#place_to_add').append(img);
img.ready(fade_into_next);

【讨论】:

  • 因为该页面有一个幻灯片,最多包含 100 张图片(平均 15 张),大小从 12kb 到 50kb(平均 25kb)。当需要在幻灯片放映时加载图像时,将平均 375kb(或最多 2mb)添加到初始页面加载似乎是最低效的。或异步。而且,不,没有缩略图。 (所以我可以加载拇指,然后在点击时将全尺寸图像加载到 iframe 中)。而且,是的,我认为这很愚蠢。而且,不,我对此无能为力。
  • 我不是说在 html 中执行此操作。我的意思是在 javascript 中操作 DOM。
  • 嗯。我是。哎呀,也许这就是为什么它在“不应该”时起作用的原因。我正在执行 $.load() 请求,以便图像在插入之前完全加载(在半加载或未加载的图像中不会褪色)。
  • 你可以加载这样的元素,而不会遇到同源策略的问题。
  • 对不起,我不确定我是否理解。你是说(1)我可以做我正在做的事情而没有任何问题吗?或者你是说(2)我应该放弃“加载”步骤,而只是继续使用我设置 src 的步骤?
【解决方案2】:

【讨论】:

  • 恐怕没有提供比我链接的问题更多的信息。我的问题涉及所有这些信息,但也涉及图像。在我的情况下也不同的是它现在正在工作:图像正在加载。从我一直在阅读的内容来看,它们不应该是。图像或二进制文件是否以某种方式被区别对待?或者仅仅是因为它是本地主机——尽管我仍在从同一个生产服务器加载图像。
  • 哈,实际上看起来很可能(尽管我还想要更多细节),因为我相当直接地将 src 设置为图像的 url。我知道当我在本地主机上使用图像时 $.load() 正在工作,但现在可能不是我正在加载真实的......但我从来没有注意到,因为它看起来像在图像最终加载时工作无论如何。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-02
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 2016-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多