-1

Я пытаюсь написать функцию JavaScript, которая получает внешний url, и пытается проверить его существование в течение 'tmOut' msecs. Если он проверен в течение этого периода времени, он должен вызвать функцию обратного вызова с этим URL-адресом в качестве аргумента.Междоменный XMLHttpRequest для проверки существования веб-сайта?

Вот функция:

function chkUrl(url, tmOut, callback) { 
    var abortChk = false; 
    var abortTmr = setTimeout(function(){abortChk = true;}, tmOut); 
    var x = new XMLHttpRequest(); 
    x.onreadystatechange = function() { 
    if (x.readyState == 4) { 
     if (x.status < 400 && !abortChk) { 
     clearTimeout(abortTmr); 
     callback(url); 
     } 
    } 
    }; 
    x.open('GET', url, true); 
    x.send(null); 
} 

Проблема из-за вызовов между доменами (возможно) я получаю x.status = 0 независимо от существования URL.

  1. Есть ли способ преодолеть/решить проблему (без необходимости изменять настройки браузера по умолчанию)? Альтернативно, есть ли способ достичь той же функциональности в противном случае?

  2. Является ли эта функция «реентерабельной»? (Я могу назвать это безопасно несколько раз для различных URL-адресов на один раз?)

ответ

0

Есть ли способ преодолеть/обходной путь проблема

на стороне клиента? Только если сайты, на которые вы делаете запрос, используете CORS для предоставления вам разрешения (что кажется маловероятным с учетом контекста).

Выполните свой тест с вашего сервера, а не непосредственно из браузера.

Является ли эта функция «реентерабельной»? (могу ли я называть это безопасно несколько раз для разных URL-адресов одновременно?)

Да. Вы не создаете никаких глобальных переменных.