2010-07-25 42 views
21

Tôi đang tải đường dẫn hình ảnh qua jQuery $ .ajax và trước khi hiển thị hình ảnh tôi muốn kiểm tra xem nó có tồn tại không. Tôi có thể sử dụng sự kiện tải hình ảnh/sẵn sàng hoặc một cái gì đó tương tự để xác định rằng đường dẫn tệp hợp lệ không?jQuery: Kiểm tra xem hình ảnh có tồn tại

Có .myimage thiết lập để display: none, tôi hy vọng sẽ làm điều gì đó như

$(".myimage").attr("src", imagePath); 
$(".myimage").load(function() { 
    $(this).show(); 
}); 

là bất cứ điều gì như thế có thể?

+0

này có thể giúp http://www.ambitionlab.com/how-to-check-if-a-file- tồn tại-sử dụng-jquery-2010-01-06 – Hari

Trả lời

33

Vâng, bạn có thể ràng buộc .error() xử lý ...

như thế này,

$(".myimage").error(function(){ 
    $(this).hide(); 
}); 

tốt, bạn không sao đã có load-event

$(".myimage").load(function() { 
    $(this).show(); 
}); 

vấn đề với điều này là nếu javascript đã bị tắt hình ảnh sẽ không bao giờ hiển thị ...

+0

Oh thực sự? Tôi không nghĩ rằng phương pháp tải có thể được sử dụng, tôi chỉ đăng nó như là một ví dụ về những gì tôi đang cố gắng làm. Ngoài ra tôi không quan tâm về Javascript bị vô hiệu hóa kể từ khi tôi đang sử dụng $ .ajax để bắt đầu với .. :) +1 – Marko

+0

xin vui lòng giải thích lý do tại sao bỏ phiếu xuống. Vì vậy, câu trả lời này có thể được cải thiện nếu bạn có một cái gì đó ... – Reigel

+0

Điều này dường như chỉ hoạt động liên tục trong Internet Explorer 9. (Tôi chưa thử nghiệm các phiên bản tức là khác). Tôi đang sử dụng nhiều $ (tài liệu). Các chức năng đã sẵn sàng nhưng có vẻ như nó hoạt động mà không bị cản trở trong các trình duyệt khác và không có lỗi nào bị ném. Bạn có thể thấy ở đây - nếu trang bìa không tồn tại trên máy chủ, điều đó có nghĩa là trang bìa đã bị xóa và sau đó hiển thị thông tin đã xóa. http://fordummiescovers.com/share.php?id=100 Chức năng JS: http://fordummiescovers.com/js/covercheck.js – BWelfel

4

Vì bạn đã thực hiện yêu cầu AJAX, tôi sẽ chuyển tải ứng dụng này sang ứng dụng phía máy chủ đang hỗ trợ AJAX của bạn. Việc kiểm tra xem tệp có tồn tại từ máy chủ hay không và bạn có thể đặt biến trong dữ liệu bạn gửi lại để chỉ định kết quả.

+1

+1 Suy nghĩ tốt. –

+1

-1 '.load()' OP đang sử dụng không phải là ajax .... http://api.jquery.com/load-event/ – Reigel

+0

Đó là câu trả lời hợp lý và có thể thay thế, nhưng câu hỏi của tôi là nếu tôi có thể kiểm tra với jQuery cụ thể .. 1 cho phương pháp máy chủ mặc dù. – Marko

6

Một ol d chủ đề tôi biết nhưng tôi nghĩ rằng nó có thể được cải thiện. Tôi nhận thấy OP có vấn đề liên tục có thể do tải hình ảnh và kiểm tra lỗi đồng thời. Sẽ tốt hơn để tải hình ảnh đầu tiên và sau đó kiểm tra lỗi:

$(".myimage").attr("src", imagePath).error(function() { 
    // do something 
}); 
20

Hãy thử:

function urlExists(testUrl) { 
var http = jQuery.ajax({ 
    type:"HEAD", 
    url: testUrl, 
    async: false 
    }) 
    return http.status; 
     // this will return 200 on success, and 0 or negative value on error 
} 

sau đó sử dụng

if(urlExists('urlToImgOrAnything') == 200) { 
    // success 
} 
else { 
    // error 
} 
+0

Điều này dẫn đến cảnh báo sau: "XMLHttpRequest đồng bộ trên chuỗi chính không được chấp nhận vì những ảnh hưởng bất lợi của nó đến trải nghiệm của người dùng cuối. " –

2

Câu hỏi này là một cặp vợ chồng tuổi, nhưng đây là một ví dụ sử dụng tốt hơn cho trình xử lý lỗi cho bất kỳ ai nhìn vào điều này.

$("img") 
    .error(function(){ 
    $(this).hide(); 
    }) 
    .attr("src", "image.png"); 

Bạn cần đính kèm trình xử lý lỗi trước khi thử tải hình ảnh để bắt sự kiện.

Nguồn: http://api.jquery.com/error/

0

Đây là những gì tôi đã làm của tôi:

$.get('url/image', function(res){ 
    //Sometimes has a redirect to not found url 
    //Or just detect first the content result and get the a keyword for 'indexof' 
    if (res.indexOf('DOCTYPE') !== -1) { 
     //not exists 
    } else { 
     //exists 
    } 
}); 
Các vấn đề liên quan