2010-01-04 16 views

Odpowiedz

58

można wymusić odświeżenie poprzez dołączenie losowy ciąg na końcu, zmieniając w ten sposób URL:

$('#verifyimage').click(function() { 
    $(this).attr('src', $(this).attr('src')+'?'+Math.random()); 
}); 
+2

Eww. Nie, nie rób tego. Zamiast tego ustaw odpowiednie nagłówki odpowiedzi buforowania na serwerze. –

+1

'Cache-control',' Expires', et al. działa tylko po otrzymaniu żądania HTTP - powyższe jest po prostu zmuszeniem klienta do wykonania tego żądania. W przypadku braku "Image.reload" (AFAIK), była to najprostsza metoda, aby nowe żądanie –

+6

zasugerowało, że podciąg na atrybucie src jest "?" tak, że po raz pierwszy nie dołącza więcej danych do powtórzenia ... – Tracker1

9

Dodaj znacznik czasu lub liczbę losową:

var timestamp = new Date().getTime(); 
$(this).attr('src',$(this).attr('src') + '?' +timestamp); 
+2

Znacznik czasu jest lepszym rozwiązaniem! Nie można polegać na losowości, aby czasem nie być tym samym. – jerwood

+0

próbował tego, ale ma problem w chrome. Obraz src zostanie dołączony z sygnaturą czasową, ale miniatura nie zostanie odświeżona. Czy możesz mi coś zasugerować? –

+0

@RohanPatil - Tutaj jest oczywisty problem - chcesz ** dodać lub zaktualizować ** parametr ** zapytania ** - ten kod jest tylko częściowym rozwiązaniem - zakłada, że ​​nie ma parametrów zapytania na początek (dodatkowo , Podejrzewam, że działa tylko raz). – Kobi

0

W test.php zestawie nagłówki z Content-Type: do image/jpeg

6

Biorąc KPrimes wielki odpowiedź i dodając trackery sugestii, to co wymyśliłem:

jQuery(function($) { 
    // we have both a image and a refresh image, used for captcha 
    $('#refresh,#captcha_img').click(function() { 
     src = $('#captcha_img').attr('src'); 
    // check for existing ? and remove if found 
     queryPos = src.indexOf('?'); 
     if(queryPos != -1) { 
      src = src.substring(0, queryPos); 
     }  
     $('#captcha_img').attr('src', src + '?' + Math.random()); 
     return false; 
    }); 
}); 
Powiązane problemy