Из документации jquery метод $.ajax()
возвращает объект jqXHR
(полностью читается как объект jquery XMLHttpRequest).
Когда вы возвращаете данные с сервера в другомфункция, подобная этой
function get_emailno(emailid, mailfolder) {
$.ajax({
// ajax settings
});
return email_number;
}
Обратите внимание, что $.ajax ({...})
вызов асинхронный. Следовательно, код внутри него не обязательно выполняется перед последним оператором возврата. Другими словами, вызов $.ajax ()
является отложенным для выполнения в будущем, в то время как оператор return выполняется немедленно.
Следовательно, jquery указывает, что вы обрабатываете (или реагируете) выполнение ajax-запросов с помощью обратных вызовов и , а не операторов возврата.
Существует два способа определения обратных вызовов.
1. Определите их в настройках jjery ajax-запроса следующим образом:
$.ajax({
// other ajax settings
success: function(data) {},
error: function() {},
complete: function() {},
});
2. Или объединить обратные вызовы возвращенного объекта jqXHR следующим образом:
$.ajax({
// other ajax settings
}).done(function(data) {}).fail(function() {}).always(function() {});
Два метода эквивалентны. success:
эквивалентно done()
, error:
эквивалентно fail()
и complete:
эквивалентно always()
.
Включено, когда уместно использовать, какую функцию: используйте success:
обрабатывать случай, когда возвращаемые данные - это то, что вы ожидаете;используйте error:
, если что-то пошло не так во время запроса, и, наконец, используйте complete:
, когда запрос завершен (независимо от того, был ли он успешным или нет).
С этим знанием вы можете лучше написать свой код для catch данные, возвращенные с сервера в в нужное время .
var email_number = '';
// check if page refreshed or reloaded
if (performance.navigation.type == 1) {
var hash = window.location.hash;
var mailfolder = hash.split('/')[0].replace('#', '');
var emailid = 'SUJmaWg4RTFRQkViS1RlUzV3K1NPdz09';
get_emailno(emailid, mailfolder);
}
function get_emailno(emailid, mailfolder) {
$.ajax({
url: 'getemailnumber.php',
type: 'POST',
data : {
emailid: emailid,
mailfolder: mailfolder
},
success: function(data)
{
// sufficient to get returned data
email_number = data;
// use email_number here
alert(email_number); // alert it
console.log(email_number); // or log it
$('body').html(email_number); // or append to DOM
}
});
}