2015-09-18 4 views
0

Я посреди пытаться использовать JavaScript для синтаксического анализа документа XML, и продолжать работать в следующей задаче:XMLHttpRequest.status не возвращает значение

При попытке использовать xmlhttp.status для проверьте, существует ли файл, который я пытаюсь извлечь, я получаю сообщение об ошибке «Доступ к ограниченному URI», когда файл, который я пытаюсь извлечь, не существует.

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

function loadXML(input_url) { 
    var xmlDoc; 
    xmlhttp = new XMLHttpRequest(); 
    xmlhttp.open("GET",input_url,false); 
    xmlhttp.send(); 

    if (xmlhttp.status == 200) {  //File exists 
     xmlDoc = xmlhttp.responseXML; 
     return xmlDoc 
    } 
    else if (xmlhttp.status == 404) { //File doesn't exist 
     alert("Hey! The file doesn't exist!"); 
     return; 
    } 

    var url = prompt("Please enter a URL here: :"); 
    var XMLDoc = loadXML(url); 

Поэтому, когда я запускаю приведенный выше код с действующим адресом, все в порядке и денди.

Однако, только когда я пытаюсь получить доступ к недопустимому URL-адресу (где файл не существует), который я запускаю в вышеупомянутую проблему.

Я просмотрел другие ответы, и я действительно добился определенного прогресса, используя выражения try/catch.

Однако, для жизни меня не могу понять, зачем вводить else, если блок генерирует эту ошибку. Любые советы/рекомендации по этому вопросу будут высоко оценены.

ответ

0

Попробуйте сделать это асинхронно.

xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState === 4) { 
     if(xmlhttp.status === 200) 
      /* do stuff */ 
     else 
      /* do other stuff */ 
    } else 
     console.info("state is " + req.readyState); 
} 
xmlhttp.open("GET", input_url, true); // note the true parameter for async 
xmlhttp.send(null); 

console.info даст вам знать, если запрос «заблокирован» в состоянии, но оно никогда не должно быть даже в том случае, если URL недействителен или вещи, вы всегда должны закончить в 4 этапа.

Попробуйте это и дайте мне знать.

Кроме того, обязательно прочитайте https://developer.mozilla.org/fr/docs/Web/API/XMLHttpRequest, поскольку по умолчанию существует ограничение на максимальные одновременные запросы и т. Д.

Смежные вопросы