Получить код состояния запроса XHR без заголовка CORS

Я пытаюсь проверить, существует ли страница в Интернете. Мне не нужен контент, просто чтобы знать, существует ли страница.

try {
    jQuery.ajax(link, {
      statusCode: {
        404: function() {
          jQuery("#moreInfo").html("not working");
        },
        200: function() {
          jQuery("#moreInfo").html("<a href='" + link + "'>Technical Details</a>");
        }
      }
    });
} catch (e) {
    console.log(e);
}

Я обнаружил, что браузер ДЕЙСТВИТЕЛЬНО знает, получил ли он ответ 404, и это все, что мне нужно знать.

Я пробовал запустить запрос в консоли и обнаружил следующее:

Internet Explorer: в ответе 200 IE 11 выдает код ошибки 0x2ef1, а в ответе 404 - 0x80070005.

Chrome: ответ 404 добавляет следующее к ответу без заголовка CORS по умолчанию: The response had HTTP status code 404.

Firefox: записывает код состояния в консоль, если включены сетевые сообщения - [HTTP/1.1 404 NOT FOUND 6ms]

Есть ли способ получить эту информацию в моем скрипте и проверить, был ли запрос успешным или нет? Или есть лучший способ определить, существует ли страница на стороне клиента?


person Josiah    schedule 31.05.2016    source источник


Ответы (2)


Есть ли способ получить эту информацию в моем скрипте и проверить, был ли запрос успешным или нет?

Не с кодом на стороне клиента.

Браузер знает и рад сообщить пользователю о браузере, но та же политика происхождения запрещает ему сообщать ваш JavaScript.

Вы должны сделать это с помощью кода на стороне сервера.

person Quentin    schedule 31.05.2016

Если вы пытаетесь проверить, существует ли страница или нет, то мы используем этот способ.

function isValidURL(link) {
    var encodedURL = encodeURIComponent(link);
    var isValid = false;

    $.ajax({
      url: "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22" + encodedURL + "%22&format=json",
      type: "get",
      async: false,
      dataType: "json",
      success: function(data) {
        isValid = data.query.results != null;
      },
      error: function(){
        isValid = false;
      }
    });

    return isValid;
}

Если он присутствует, функция вернет вам истину, иначе ложь

person Tanvi B    schedule 31.05.2016