ВОПРОС:
Как проверить, является ли URL действительным и действительно ли загружает страницу?
С моим текущим кодом проверяется только код состояния, который означает, что 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-существующие" указывает, что 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, но мой исходный код фактически выполняется полностью, в то время как другой запрос не выполняет добраться до console.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)