2011-12-28 1 views
0

Я использую jsonp с jQuery, и он работает хорошо. Но порядок выполнения кода - это не то, что я ожидаю. Я имею в виду, что у меня есть функция:Порядок выполнения кода при использовании jsonp с jQuery

function is_server_alive() { 
    var result; 
    console.log("beginning of function result" + result); 
    $.ajax({ 
     url: server + "/is_alive", 
     async: false, 
     dataType: "jsonp", 
     jsonp: "callback", 
     success: function(JSON){ 
      result = JSON.return; 
      console.log("is_server_alive result: " + result); 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown){ 
      console.log("server is dead " + textStatus); 
     }, 
    }); 
    console.log("end of function result: " + result); 
    return result; 
} 

Я пытаюсь вернуть переменную результата. Но из-за запроса ajax после того, как все произошло, я не могу этого сделать. Возвращаемое значение кажется неопределенным. Консольный выход как:

beginning of function result: undefined 
end of function result: undefined 
is_server_alive result: 0 

Я пытаюсь async для истины/ложных и ничего не изменилось. Как я могу вернуть переменный результат или изменить порядок выполнения, поэтому выход стать:

beginning of function result: undefined 
is_server_alive result: 0 
end of function result: 0 

ответ

0

Вы можете добавить еще один параметр, complete, функции $.ajax:

function is_server_alive() { 
    var result; 
    console.log("beginning of function result" + result); 
    $.ajax({ 
     url   : server + "/is_alive", 
     async  : false, 
     dataType : "jsonp", 
     jsonp  : "callback", 
     success  : function(JSON){ 
      result = JSON.return; 
      console.log("is_server_alive result: " + result); 
     }, 
     error  : function(XMLHttpRequest, textStatus, errorThrown){ 
      console.log("server is dead " + textStatus); 
     }, 
     complete : funciton() { 
      console.log("end of function result: " + result); 
      return result; 
     } 
    }); 

} 
+0

Но делает 'обратный результат;' в полном обработчике будет фактически действовать как возврат для 'is_server_alive'? –

+0

Это только изменение вывода консоли, но не исполнение. Тем не менее запрос ajax выполняется после всего остального. – alpert