2012-02-13 5 views
1

У меня есть эта функция, которая проверяет почтовый индекс Великобритании. Проблема в том, что он никогда не возвращает true или false - только undefined.Функция javascript не возвращает правильное значение

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

возможно дубликат [возвращаемого значения внутри $ .ajax() функция] (http://stackoverflow.com/questions/ 8187201/return-value-from-inside-of-ajax-function) - пожалуйста, используйте поиск, прежде чем задавать вопрос. –

+0

Кто-нибудь еще прочитал сообщение блога Ника Крейвера о требованиях хранения SO? Интересно, сколько из дискового массива занято такими вопросами? :-) – Pointy

+0

просто потому, что вы возвращаете retval перед его установкой (асинхронно) – soju

ответ

9

Он возвращает неопределенные значения, потому что $.getJSON работает асинхронно, и по этой причине возвращается retval до выполнения функции успеха $.getJSON. Если вам нужно использовать 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

Смежные вопросы