Типичная ошибка.Код после вызова Ajax
alert(output);
return json;
выполняется, до , когда возвращается вызов Ajax.Это асинхронный (это означает, что он не выполняется, когда и где вы помещаете его в код, но в какой-то более поздний момент времени).Вы можете предоставить обратный вызов вашей функции, например:
// cb is our callback - it is a function
function queryCostCenter(user_id, currency_id, country_id, cb){
var destinations = new Array();
var destination = { qty:1, country: country_id };
destinations.push(destination)
var data = {
destinations : $.toJSON(destinations),
user_id : user_id,
currency_id: currency_id
};
$.ajax({
data: data,
type: 'POST',
url: '/lib/ajax/ajax_prepaid_cost_calculator.php',
success: function(result) { // or just `success: cb`
cb(result); // execute the callback with the returned data
}
});
}
затем:
queryCostCenter(some_value, some_value, some_value, function(result) {
// do something with the returned data.
});
Или поместите всю логику в обработчик успеха вызова Ajax.Но с функцией обратного вызова вы более гибки и можете лучше использовать эту функцию.
Это очень распространенный вариант использования обратных вызовов.Поскольку вы не знаете когда вызов Ajax будет завершен, вы передаете функцию вызову Ajax, который должен быть запущен, когда возвращаются некоторые результаты.Вы больше ничего не делаете с обработчиком success
: это функция, которая вызывается после завершения вызова.