2014-10-25 4 views
-1

Как вернуться к вызывающей функции (функция выше). Я хотел бы вернуть истину, если файл существует при выполнении UrlExists('file.png'):Как вернуться к функции, вызывающей текущую функцию

function UrlExists(url) 
{ 
    var http = new XMLHttpRequest(); 
    http.open('HEAD', url, true); 
    http.onerror = function(e){ 
          //console.log('......onerror: ' + JSON.stringify(e)); 
          if (typeof e !== 'undefined'){ 
           return false 
          } 
         }; 
    http.send(); 
    return http.onerror(); 
} 
+0

Вам нужно сделать синхронный вызов, так что он останавливается и ждет. Вам не нужно знать, является ли это функцией 'UrlExists()' (которую я не верю, что вы можете получить). Это означает, что это должно быть 'http.open ('HEAD', url, false)'. –

+0

Я действительно ищу использовать асинхронный вызов, вы можете помочь с ним? – Louis

+0

Третий аргумент для 'http.open()' is 'async: true', поэтому передайте false, и он будет синхронным. У меня есть это в конце моего последнего комментария. ';)' –

ответ

0

Использование XMLHttpResponse в асинхронном. Поскольку асинхронные ответы не могут быть получены в том порядке, в котором они запрошены, и поскольку вы можете проверять несколько файлов, может быть хорошей идеей проверить свойство responseURL, прежде чем действовать в случае, когда файл не существует (не является найден или возвращает ошибку, и т.д.)

jsFiddle пример: http://jsfiddle.net/5f42L6nz/4/

Источник: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests

function UrlExists(url) { 
    var xhr = new XMLHttpRequest(); 
    xhr.open("GET", url, true); // true => async request 
    xhr.onload = function (e) { 
     if (xhr.readyState === 4) { 
      if (xhr.status === 200) { 
       // URL found, do stuff for "exists" 
       alert("url exists:\r\n" + xhr.responseURL); 
      } else { 
       // URL not found, could check xhr.status === 404, etc. 
       // do stuff when URL not found, but no exception/error thrown 
       alert("not found or unexpected response:\r\n" + xhr.responseURL); 
      } 
     } 
    }; 
    xhr.onerror = function (e) { 
     console.error(xhr.statusText); 
    }; 
    xhr.send(null); 
} 
var url = '/'; // just an example, get web app root 
UrlExists(url); 
UrlExists("/badurl"); 
+0

. Можно ли изменить код так, чтобы 'UrlExists' возвращал true или false вместо того, чтобы вводить предупреждение? – Louis

+0

Нет, не с асинхронным подходом. Вам нужно будет создать функцию обратного вызова, которая вместо этого сделала бы что-то с результатом. Поэтому вместо вызова 'alert()', создайте и вызовите новую функцию следующим образом: 'function UrlExists_Callback (isValid) {if (isValid === true) {// делать вещи, если файл существует} else {// делать что-то, если not}} ' – nothingisnecessary

+0

ok Я вижу, большое спасибо! – Louis

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