2015-07-11 72 views
0

我正嘗試使用以下代碼,這是我在其他帖子中發現/編輯的代碼。 我想使用函數「IsValidImageUrl()」即時返回結果。由於此函數在單獨的線程中運行,因此我無法獲取該值,例如,如果我「返回True」;代替「isValid = true;」我總是得到「未定義」的回報。所以我試圖使用全局變量「isValid」,但它似乎總是落後一步,這意味着我需要調用該函數兩次,以獲得第一個調用的結果。從javascript中的單獨線程傳遞/訪問值

我基本失蹤了什麼?或者你能否提出另一種我可以做到的方法?

謝謝!

<script> 
    var isValid; 
    function IsValidImageUrl(url) { 
     $("<img>", { 
         src: url, 
         error: function() { isValid=false; }, 
         load: function() { isValid=true; } 
        }); 
    } 

    IsValidImageUrl("https://www.google.com/logos/2012/hertz-2011-hp.gif"); 
    alert(isValid); 
    IsValidImageUrl("http://google.com"); 
    alert(isValid); 
</script> 

回答

0

問題是您必須等待圖像加載或失敗後才能使用狀態。最好的方法是在圖像加載或發生錯誤時爲IsValidImgUrl函數提供回調函數(或者單獨執行成功和失敗的函數)。
在這個例子中,圖像元素也被傳遞給回調函數,以便他們知道他們被調用的圖像。

function IsValidImageUrl(url, okFunc, errFunc) 
 
{ 
 
    var image = document.createElement("IMG"); 
 
    image.src = url; 
 
    image.onload = function() {okFunc(image)}; 
 
    image.onerror = function() {errFunc(image)}; 
 
} 
 

 
function imageLoadSucces(image) 
 
{ 
 
    alert("image loaded: " + image.src); 
 
} 
 

 
function imageLoadFail(image) 
 
{ 
 
    alert("image load error: " + image.src); 
 
} 
 

 
IsValidImageUrl("https://www.google.com/logos/2012/hertz-2011-hp.gif", imageLoadSucces, imageLoadFail); 
 
IsValidImageUrl("http://google.com", imageLoadSucces, imageLoadFail);

+0

M69,你肯定向我指出一個正確的方向。真心感謝! – yangkwak