gpt4 book ai didi

jQuery AJAX 仅获取标题并决定是否获取内容

转载 作者:可可西里 更新时间:2023-11-01 16:47:25 25 4
gpt4 key购买 nike

我正在制作一个基于 jQuery.ajax() 的 AJAX 脚本并且已经到了我应该以某种方式检查我试图加载的链接是否是 html 页面或其他东西的地步不同于 swf、图像或 zip。所以我需要以某种方式检查内容类型 header 并决定是否也应该获取内容(如果它是 html)或放弃 ajax 调用并执行 window.location = theUrl。我不想得到整个文件只是为了发现它是一个 100MB 的 zip 文件。

有没有办法在请求仍在进行时“暂停”(或中止)并只读取标题? HEAD 调用不是一个选项,因为这样我每次都必须向服务器发出 2 个请求。

也许是对 setTimeout 和低级 xhr 函数的某种破解?

提前致谢! :)

编辑:尝试在请求完成之前从 setTimeout 中的 xhr 获取 header ,但在获取所有数据之前它似乎不会填充它。

编辑 2:我破解了将自身绑定(bind)到 onreadystatechange 的 jquery 东西:

var xhrr = new window.XMLHttpRequest();
$.ajaxSetup({
xhr: function() { return xhrr }
});

...
$.ajax(....);

var theirfunc = xhrr.onreadystatechange;
xhrr.onreadystatechange = function() {
console.log('xhr state: ', xhrr.readyState);
theirfunc();
};

所以这给了我状态 1、2、3、4 的顺序,我可以获取内容类型并成功中止。我仍在调查为什么当 jquery 本身创建 XMLHttpRequest 对象时它不起作用。如果我跳过 ajaxSetup 部分并获取 var xhrr = $.ajax(...) 然后以相同的方式绑定(bind)它不会工作。那么我的 xhr 与 jquery 有何不同?我看到他们是这样做的:

function createStandardXHR() {
try {
return new window.XMLHttpRequest();
} catch( e ) {}
}

所以它应该没有什么不同?

编辑 3:找到了! jquery 1.6 返回一个只有少量属性的假 xhr 对象,onreadystatechange 不是其中之一。

最佳答案

通过使用“HEAD”类型,jQuery 不会下载内容,它只会获取标题。

然后您可以通过对返回的 XHR 对象使用 getResponseHeader 按名称获取它们。

$.ajax({
type: 'HEAD',
url: 'http://example.com/api.php',
complete: function(xhr) {
var contentLength = xhr.getResponseHeader('Content-Length');
}
});

您还可以使用以下命令获取所有响应 header 的列表:

xhr.getAllResponseHeaders()

关于jQuery AJAX 仅获取标题并决定是否获取内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6696229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com