Как проверить, была ли найдена страница в iframe (а не 404)? [Дубликат]

Чтобы предложить лучшее решение, я могу сказать, что обнаружил следующий метод:

parseFloat((0.1 + 0.2).toFixed(10)) => Will return 0.3

Позвольте мне объяснить, почему это лучшее решение. Как упоминалось выше в других ответах, рекомендуется использовать готовые для использования функции Javascript toFixed () для решения проблемы. Но, скорее всего, вы столкнетесь с некоторыми проблемами.

Представьте, что вы собираетесь добавить два числа с плавающей запятой, такие как 0.2 и 0.7, вот оно: 0.2 + 0.7 = 0.8999999999999999.

Ваш ожидаемый результат 0.9 означает, что в этом случае вам нужен результат с точностью до 1 цифры. Поэтому вы должны были использовать (0.2 + 0.7).tofixed(1), но вы не можете просто указать определенный параметр toFixed (), поскольку он зависит от заданного числа, например

`0.22 + 0.7 = 0.9199999999999999`

. В этом примере вам нужна точность в 2 цифры так что это должно быть toFixed(2), так что должно быть параметром для каждого заданного числа с плавающей запятой?

Вы могли бы сказать, что пусть это будет 10 в каждой ситуации:

(0.2 + 0.7).toFixed(10) => Result will be "0.9000000000"

Черт! Что вы собираетесь делать с этими нежелательными нулями после 9? Пришло время преобразовать его в float, чтобы сделать его по вашему желанию:

parseFloat((0.2 + 0.7).toFixed(10)) => Result will be 0.9

Теперь, когда вы нашли решение, лучше предложить его как функцию:

function floatify(number){
       return parseFloat((number).toFixed(10));
    }
 
function addUp(){
  var number1 = +$("#number1").val();
  var number2 = +$("#number2").val();
  var unexpectedResult = number1 + number2;
  var expectedResult = floatify(number1 + number2);
  $("#unexpectedResult").text(unexpectedResult);
  $("#expectedResult").text(expectedResult);
}
addUp();
input{
  width: 50px;
}
#expectedResult{
color: green;
}
#unexpectedResult{
color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="number1" value="0.2" onclick="addUp()" onkeyup="addUp()"/> +
<input id="number2" value="0.7" onclick="addUp()" onkeyup="addUp()"/> =
<p>Expected Result: <span id="expectedResult"></span></p>
<p>Unexpected Result: <span id="unexpectedResult"></span></p>

Вы можете использовать его следующим образом:

var x = 0.2 + 0.7;
floatify(x);  => Result: 0.9
21
задан L84 2 March 2016 в 03:57
поделиться

4 ответа

Вы можете проверить URL-адрес через AJAX и прочитать код состояния - то есть, если URL-адрес находится в одном домене.

Если это удаленный домен, вы можете иметь серверный скрипт в вашем собственном домене проверьте удаленный URL.

22
ответ дан Community 27 August 2018 в 20:08
поделиться

Я нашел, что это сработало в моем сценарии.

Методы обратного вызова jqXHR.success (), jqXHR.error () и jqXHR.complete (), введенные в jQuery 1.5, устарели как jQuery 1.8. Чтобы подготовить код для их возможного удаления, вместо этого используйте jqXHR.done (), jqXHR.fail () и jqXHR.always ().

$.get("urlToCheck.com").done(function () {
  alert("success");
}).fail(function () {
   alert("failed.");
});
2
ответ дан fragmint 27 August 2018 в 20:08
поделиться

Вы можете попробовать и сделать просто GET на странице, если вы получите 200 обратно, это означает, что страница существует. Попробуйте это (используя jQuery), функция - это функция обратного вызова успеха при успешной загрузке страницы. Обратите внимание, что это будет работать только на сайтах вашего домена, чтобы предотвратить XSS. Другие домены должны обрабатываться на стороне сервера

$.get(
   yourURL,
   function(data, textStatus, jqXHR) {
      //load the iframe here...
   }
);
2
ответ дан Matt Dodge 27 August 2018 в 20:08
поделиться

Из-за моей низкой репутации я не мог комментировать ответ Дерека 朕 會 功夫. Я пробовал этот код так, как он есть, и это не сработало. В коде Derek 朕 會 есть три вопроса.

  1. Во-первых, время для асинхронного отправки запроса и изменения его свойства «статус» выполняется медленнее, чем выполнение следующего выражения - if (request.status === «404»). Таким образом, request.status, в конечном счете, из-за интернет-диапазона, останется в состоянии 0 (ноль), и он не достигнет кода справа внизу, если. Исправить это легко: измените «true» на «false» при открытии метода запроса ajax. Это приведет к кратковременному (или не очень) блоку вашего кода (из-за синхронного вызова), но изменит статус запроса до того, как он достигнет теста if.
  2. Во-вторых, статус целое число. Используя оператор сравнения === 'javascript, который вы пытаетесь сравнить, если левый объект идентичен объекту с правой стороны. Для выполнения этой работы существует два способа: Удалить кавычки, которые окружают 404, что делает его целым; Используйте оператор javascript '==', чтобы вы тестировали, если оба объекта похожи.
  3. В-третьих, объект XMLHttpRequest работает только в более новых браузерах (Firefox, Chrome и IE7 +). Если вы хотите, чтобы этот фрагмент работал на всех браузерах, вы должны делать то, что предлагает W3Schools: w3schools ajax

Код, который действительно работал для меня, был:

var request;
if(window.XMLHttpRequest)
    request = new XMLHttpRequest();
else
    request = new ActiveXObject("Microsoft.XMLHTTP");
request.open('GET', 'http://www.mozilla.org', false);
request.send(); // there will be a 'pause' here until the response to come.
// the object request will be actually modified
if (request.status === 404) {
    alert("The page you are trying to reach is not available.");
}
41
ответ дан Nit 27 August 2018 в 20:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: