【发布时间】:2020-02-18 17:36:21
【问题描述】:
问题:
如何检查 url 是否有效并实际加载页面?
使用我当前的代码,只检查状态码,这意味着像http://fsd.com/ 这样的网址将被视为有效,尽管它不会加载任何内容。
如何检查 url 是否确实指向可以加载的网站?
代码:
$.ajax({
url: link,
dataType: 'jsonp',
statusCode: {
200: function() {
console.log( "status code 200 returned");
validURL = true;
},
404: function() {
console.log( "status code 404 returned");
validURL = false;
}
},
error:function(){
console.log("Error");
}
});
编辑: 有效,我的意思是页面最终被部分加载(至少加载了 html 和 css),而不是永远加载或以某种方式失败而状态代码为 404 .
EDIT2: http://fsd.com 现在实际上返回了一个 404,因为它应该......
EDIT3: 另一个示例:https://dsd.com 加载一个空页面(状态代码 200),而 http://dsd.com 实际上加载一个包含内容的页面(状态代码 200)。在我的 Node.js 后端,npm 包“url-exists”表示 https://dsd.com 无效,而我的前端带有我的问题中显示的代码表示它是一个有效的 url。这是包代码的样子:https://github.com/boblauer/url-exists/blob/master/index.js 但我想知道根据 SO 用户的最佳方式是什么。
EDIT4:
遗憾的是,Addis 提供的请求显然被 CORS 阻止了,这阻止了我的其余代码的执行,而我的原始请求没有。
$.ajax({
type: "HEAD",
url: link,
dataType: 'jsonp',
}).done(function(message,text,response){
const size = response.getResponseHeader('Content-Length');
const status = response.status;
console.log("SIZE: "+size);
console.log("STATUS: "+status);
if(size > 0 && status == "200") {
$("#submitErrorMessage").css("display","none");
$('#directoryForm').submit();
}
else {
$("#submitErrorMessage").css("display","block");
$("#submitLoading").css("display","none");
}
});
编辑 5:
更准确地说,这两个请求都会在浏览器控制台中触发一条警告消息,指示响应已因 CORS 而被阻止,但我的原始代码实际上已全部执行,而另一个请求没有到达控制台.log()。
编辑 6:
$.ajax({
async: true,
url: link,
dataType: 'jsonp',
success: function( data, status, jqxhr ){
console.log( "Response data received: ", data );
console.log("Response data length: ", data.length);
console.log("Response status code: ", status);
if (status == "200" && data.length > 0) {
$("#submitErrorMessage").css("display","none");
$('#directoryForm').submit();
}
else {
$("#submitErrorMessage").css("display","block");
$("#submitLoading").css("display","none");
}
},
error:function(jqXHR, textStatus, errorThrown){
console.log("Error: ", errorThrown);
}
});
错误:
Error: Error: jQuery34108117853955031047_1582059896271 was not called
at Function.error (jquery.js:2)
at e.converters.script json (jquery.js:2)
at jquery.js:2
at l (jquery.js:2)
at HTMLScriptElement.i (jquery.js:2)
at HTMLScriptElement.dispatch (jquery.js:2)
at HTMLScriptElement.v.handle (jquery.js:2)
【问题讨论】:
-
你的意思是一个 URL 是有效的并且实际上可以加载?如果您获得 200,则可以到达并加载它。您能更具体地说明您的需求吗?
-
由于没有有效页面的真正定义,因此您确实不能。 http code 200 是页面打开成功的唯一指示。
-
@blurfus 编辑了问题。
-
嗯,我还不清楚。如果您收到 200 状态代码,则该页面可以加载(并且在许多情况下,其数据已经在响应中)。
-
@blurfus 你可能是对的。检查 EDIT2。我想知道为什么它在不加载之前返回 200:/
标签: javascript jquery ajax url status