Czekanie na pliki obrazów

0

Mam taki problem: chcę wyświetlić pliki obrazów pod warunkiem, że te pliki istnieją, w przeciwnym wypadku chciałbym wyświetlić plik none.jpg. Po poszukiwaniach postanowiłem wykorzystać Ajax-owy Promise. Ale jak to zwykle jest pod górę. Mam taki kod:

$.ajax({
    url:'http://static.4programmers.net/template/img/facebook-image.png',
    type:'HEAD',
    error: function()
    {
       document.write(0+1);
		//nie ma pliku
    },
    success: function()
    {
		document.write(1 + 1);
        //plik istnieje
    }
});

Niestety cały czas dostaję jako wynik "1" czyli error, nieważne czy link do pliku jest poprawny czy nie. I drugi temat: chciałbym żeby toto wykonywało się w nieskończoność, czyli do momentu aż właściwy plik pojawi się. Nie wiem czy zabieram się do tego od właściwej strony, ale słabo się na tym znam więc ewentualnie proszę mnie naprostować jakbym pisał bzdury.

0

Jakbyś zrobił podstawową rzecz i zajrzał do konsoli JS to byś zobaczył, że pliki na http://static.4programmers.net mają zablokowane CORSy.
Poza tym ja w Twoim kodzie żadnych promisów nie widzę.

Tu masz przykład z promisami ( https://developer.mozilla.org/en-US/docs/Web/API/GlobalFetch/fetch ):

<img src="" alt="example" id="example" />
const loadImage = (img, url, defaultUrl) =>
  fetch(url)
    .then(response => response.blob())
    .then(image => img.src = URL.createObjectURL(image))
    .catch(() => img.src = defaultUrl);

// usage:
loadImage(
  document.getElementById('example'),
  '//placekitten.com/200/100',
  '//placehold.it/200x100?text=default'
);

Codepen: http://codepen.io/anon/pen/mAPWrL?editors=1010

PS
0 + 1 ? O_o

0

OK, dobiłem się do takiej formuły:

var timerForLoadingResult = setInterval(checkServerForFile, 4000); 

function checkServerForFile() {
  $.ajax({
    type: "POST",
    cache: false,
    url: "http://www.domena.pl/a.txt",  //url pliku
    success: function(result) {  
      if (result) 
      {

        console.log(url.status);
        clearInterval(timerForLoadingResult)  
      };
    }
  });

}

Co właściwie rozwiązuje problem z odpytywaniem w kółko, gdyby nie jeden szczegół. Otóż czasami dostaję odpowiedź 200 a czasami np 301. Moje pytanie brzmi jak pobrać status tej odpowiedzi? Jak będę miał status to przekierowaniami nie straszne :)

0

Pojawił się kolejny problem, otóż fajnie ogarnąłem statusy, ale zapomniałem o redirect w .htaccess. I teraz pierwsza odpowiedź serwera to 302 Found, a kolejna to status 200 OK (404.htm). Mam problem ze skonstruowaniem warunku "jeśli 302-szukaj dalej"

0

Ajax powinien sam podążyć za redirectem. Nie robi tego? Możesz wkleić kod?

Swoją drogą - plik 404.htm brzmi jak strona błędu 404. Dlaczego wtedy serwujesz 200 OK? Powinno być właśnie 404.

1 użytkowników online, w tym zalogowanych: 0, gości: 1