2012-02-13 38 views
1

我有這個函數檢查英國郵政編碼。問題是它永遠不會返回truefalse - 只有undefinedjavascript函數沒有返回正確的值

function PostcodeAnywhere_Interactive_FindByPostcode_v1_00(Key, Postcode, UserName) { 

    var retval; 

    $.getJSON("https://services.postcodeanywhere.co.uk/PostcodeAnywhere/Interactive/FindByPostcode/v1.00/json3.ws?", 
    { 
     Key: Key, 
     Postcode: Postcode, 
     UserName: UserName 
    }, 
    function (response) { 
     // Test for an error 
     if (response.Items.length == 1 && typeof(response.Items[0].Error) != "undefined") { 
      // Show the error message 
      retval = false; 
     } else { 
      // Check if there were any items found 
      if (response.Items.length == 0){ 
       retval = false; 
      } else { 
       retval = true; 
      } 
     } 
    }); 

return retval; 

} 

對我來說,它看起來像它應該總是返回truefalse,所以我不明白我要去哪裏錯了。有人可以幫忙嗎? getJSON函數是否需要時間來執行?

+0

的可能重複[從裏面的$就返回值()函數(http://stackoverflow.com/questions/功能8187201 /從ajax函數內部返回值) - 請在提問之前使用搜索。 – 2012-02-13 16:25:53

+0

其他人閱讀Nick Craver關於SO存儲要求的博客文章?我想知道有多少磁盤陣列被這樣的問題所佔用? :-) – Pointy 2012-02-13 16:28:51

+0

只是因爲你在設置它之前返回retval(異步) – soju 2012-02-13 16:29:52

回答

9

它返回未定義,因爲$.getJSON異步運行,因此在執行成功函數$.getJSON之前返回retval。如果你需要使用retval必須調用其用在回調

$.getJSON("https://services.postcodeanywhere.co.uk/PostcodeAnywhere/Interactive/FindByPostcode/v1.00/json3.ws?", 
    { 
     Key: Key, 
     Postcode: Postcode, 
     UserName: UserName 
    }, 
    function (response) { 
     // Test for an error 
     if (response.Items.length == 1 && typeof(response.Items[0].Error) != "undefined") { 
      // Show the error message 
      retval = false; 
     } else { 
      // Check if there were any items found 
      if (response.Items.length == 0){ 
       retval = false; 
      } else { 
       retval = true; 
      } 
      //use retval 
      do_something_with_retval(retval); 
     } 
    }); 
+0

謝謝(並且抱歉發佈已經問過的問題) – SammyBlackBaron 2012-02-13 16:45:14