2012-02-13 83 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