Ajax HEAD request via Javascript/jQuery(通过 Javascript/jQuery 的 Ajax HEAD 请求)
问题描述
我似乎在发出 HEAD
请求以及保持数组中数据的完整性方面遇到了一些问题.
I seem to be having some issues with making HEAD
requests, and preserving the integrity of data in an array.
鉴于此片段:
var imageTemp = Array();
$('*')
.each(function(index){
if($(this).css('background-image') != 'none'){
imageTemp.push($(this).css('background-image').slice(5, -2));
}
});
我捕获给定页面上所有背景图像的 URL.现在,尝试通过 HEAD
请求获取每个图像的大小 Content-Length
,我使用了这个片段:
I capture the URLs of all background-images on a given page. Now, trying to grab the size of each image via HEAD
requests for Content-Length
, I use this snippet:
var imageData = Array();
for(var i = 0; i < imageTemp.length; i++){
ajaxSizeRequest = $.ajax({
type: "HEAD",
async: true,
url: imageTemp[i],
success: function(message){
imageData.push([imageTemp[i], ajaxSizeRequest.getResponseHeader('Content-Length')]);
}
});
}
但是,当我通过 console.log
转储 imageData
时,我每个元素(应该是一个包含 URL 和内容长度的数组)都以 [undefined, XXXX]
其中 XXXX
始终是最后请求的 Content-Length
However, when I dump imageData
via console.log
, I each element (which should be an array containing the URL and the content-length) ends up as [undefined, XXXX]
where XXXX
is always the size of the last requested Content-Length
我很困惑,尽管这似乎是一个时间/范围问题.我这里发生了某种竞争情况吗?
I'm stumped, though it appears to be a timing/scoping issue. Do I have a sort of race-condition occuring here?
推荐答案
问题是回调函数捕获的单个变量i
和ajaxSizeRequest
是一样的回调函数的所有实例的变量.我认为如果你调用一个函数并将索引变量传递给它,同时,将请求变量的范围限定为函数本身使用完成处理程序的响应参数,你应该结束由回调捕获的自变量.然后它应该正确引用每个数组元素和每个响应变量.
The problem is that the single variables i
and ajaxSizeRequest
being captured by the callback function are the same variables for all instances of the callback function. I think if you call a function and pass the index variable to it and, at the same time, scope the request variable locally to the function itself use the response parameter of the done handler, you should end up with independent variables captured by the callback. It should then reference each array element and each response variable correctly.
var imageData = Array();
for(var i = 0; i < imageTemp.length; i++){
updateImageData( i );
}
function updateImageData( i )
$.ajax({
type: "HEAD",
async: true,
url: imageTemp[i],
}).done(function(message,text,jqXHR){
imageData.push([imageTemp[i], jqXHR.getResponseHeader('Content-Length')]);
});
}
这篇关于通过 Javascript/jQuery 的 Ajax HEAD 请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:通过 Javascript/jQuery 的 Ajax HEAD 请求


基础教程推荐
- 如何添加到目前为止的天数? 2022-01-01
- 原生拖动事件后如何获取 mouseup 事件? 2022-01-01
- 在 contenteditable 中精确拖放 2022-01-01
- fetch 是否支持原生多文件上传? 2022-01-01
- Bootstrap 模态出现在背景下 2022-01-01
- 检查 HTML5 拖放文件类型 2022-01-01
- 即使用户允许,Gmail 也会隐藏外部电子邮件图片 2022-01-01
- Fabric JS绘制具有活动形状的多边形 2022-01-01
- Bokeh Div文本对齐 2022-01-01
- npm start 错误与 create-react-app 2022-01-01