2012-02-13 25 views
1

私はこの機能を使って英国の郵便番号をチェックします。問題は、trueまたはfalse - undefinedしか返さないということです。javacript関数が正しい値を返さない

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; 

} 

私にとって、それは常にtrueまたはfalseを返す必要がありますように見えますので、私は間違っているつもりだところ私は理解することはできません。誰かが助けてくれますか? getJSON関数は実行する時間が必要ですか?

+0

可能重複して、それを使用する関数を呼び出す必要があります8187201/ajax-functionの戻り値) - 質問をする前に検索を使用してください。 –

+0

誰かがSOのストレージ要件に関するNick Craverのブログ記事を読んでいますか?私はディスクアレイのどれがこのような質問によって取り上げられているのだろうか? :-) – Pointy

+0

これは設定する前にretvalを返すだけなので(非同期) – soju

答えて

9

$.getJSONが非同期に実行され、$.getJSONの成功関数が実行される前にretvalが返されるため、未定義が返されます。あなたがretval使用する必要がある場合は、(http://stackoverflow.com/questions/ [$アヤックス()関数の内部からの戻り値]のコールバック

$.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

関連する問題