2015-07-23 3 views
2

Как я могу использовать переменную в функции вне функции. Консоль.log (response) показывает, что содержимое было выбрано из php. Предупреждение (lng) не определено. Зачем? Что может быть проблемой с этим скриптом. Я был на нем некоторое время.с использованием переменной вне функции в ajax

ниже - это сценарий.

var lat; 
    var lng ; 
    $.ajax({ 
      type: 'GET', 
      url: 'getlocation.php', 
      data: 'param=no' , 
      dataType: 'JSON', 
      success: function (response) { 
       console.log(response); 
       lat = response.latitude; 
       lng = response.latitude; 
      }, 
      error: function (response){ 
       alert (response); 
      } 

     }); 
    alert(lng); 
+0

включить предупреждение в функцию обратного вызова успеха, чтобы он выполнялся только _after_ http-запрос успешно завершен, а не раньше этого. – suvartheec

ответ

3

Поскольку переменная lng не устанавливается, когда код выполняется на линии alert(lng).

Ajax call is async. Это означает, что JS двигатель переходит в поток:

  1. запрос Выпуск HTTP ($.ajax...)

(На данный момент, так как работа в сети идет медленно, поэтому JS двигатель решает продолжить выполнение следующих строк . Он возвращается после завершения ответа.)

  1. Выполняется в строке alert(lng). На данный момент все еще undefined.
  2. Ответ на запрос успеха/ошибка, затем выполните соответствующую функцию обратного вызова function(response).... Предупреждение внутри функции обратного вызова получит то, что вы хотите.
Смежные вопросы