【发布时间】:2013-06-06 14:52:07
【问题描述】:
我今天在尝试从通过 AJAX 请求下载的一串 html 中过滤图像数据时遇到了最奇怪的事情(我使用 https://github.com/padolsey/jQuery-Plugins/blob/master/cross-domain-ajax/jquery.xdomainajax.js 这样做)。
我注意到我在尝试下载的图像上收到 404。查看初始化程序堆栈后,该图像似乎位于我的 AJAX 拉回的 html 中。这是相关的堆栈:
b.extend.buildFragment @ jquery-1.9.1.min.js:4
b.extend.parseHTML @ jquery-1.9.1.min.js:3
b.fn.b.init @ jquery-1.9.1.min.js:3
b @ jquery-1.9.1.min.js:3
$.ajax.success @ main.js:86
我在 main.js 中的代码如下所示:
function generateAlbumHTML(album)
{
$.ajax({
url: album.data.url,
type: 'GET',
success: function(data)
{
var albumHtmlStr = "";
var images = $(data.responseText).find('#image-container .zoom');
$.each(images, function(i, item)
{
album.data.url = $(item).attr('href');
albumHtmlStr += generateHTML(album);
});
return albumHtmlStr;
}
});
}
看来罪魁祸首是我做的第 86 行:
var images = $(data.responseText).find('#image-container .zoom');
这会导致 JQuery 解析 HTML 并开始从 HTML 加载不需要的图像和数据。
这里是 ajax 请求作为 data.responseText 拉回的 html 的链接:http://pastebin.com/hn4jEgAA
无论如何,我在这里做错了吗?如何在不加载不需要的图像和其他数据等内容的情况下从该字符串中过滤和查找我想要的数据?
【问题讨论】:
-
是的,解析 html 会将其转换为 html,因此会导致加载任何图像。如果您想防止这种情况发生,请在将其解析为 dom 片段之前使用删除/更改所述元素的正则表达式。
-
看这个问题:stackoverflow.com/questions/6484997/… 但是我需要注意的是使用正则表达式修改html代码不是很省,因为你假设
<img ... >的每一次出现都是一个标签。 -
$(data.responseText.replace(/src\=/g,'src="dummy.gif" data-src=')).find...
标签: javascript jquery html ajax