У меня есть функция javascript, которая должна выполнять числовой расчет. Некоторые из чисел, используемых в этом расчете, хранятся в базе данных, и они будут различаться в зависимости от того, как пользователь заполняет онлайн-форму. Как только пользователь заполнит форму, он нажмет кнопку РАСЧЕТ. В настоящее время в функции JS я хотел бы использовать ajax для получения значений из базы данных, которые соответствуют некоторому другому значению, выбранному пользователем.
Простой пример: есть 3 размера футболок с разными ценами в зависимости от размера (хранится в базе данных). Пользователь выбирает размер, и когда он нажимает «РАССЧИТАТЬ», я использую ajax, чтобы получить цену, связанную с выбранным размером.
Вопрос в том, что я хочу использовать ajax для обновления некоторых переменных, которые я буду использовать позже в скрипте.То, как я пытаюсь это сделать сейчас, не работает, переменная в скрипте не обновляется из ajax, я могу получить доступ только к значению из базы данных внутри функции success
вызова ajax . Я понимаю, что это связано с тем, что ajax по своей природе асинхронен, и требуется некоторое время, ожидая возврата данных с сервера, в то время как функция все еще продолжает работать.
В следующем примере вызов ajax возвращает данные JSON, и у меня есть функция с именем isjson()
, которая проверяет, действительно ли возвращаемая строка является данными JSON.
Пример кода:
function calculate_cost(){
var price = 0;
var size = $('form#tshirt_form [name="size"] option:selected').val();
$.ajax({
url:'my_script.php',
type:'post',
data:'select=price&table=tshirts.prices&where=size = "' + size + '"',
success:function(data){
if(isjson(data)){
data = $.parseJSON(data);
data = data[0];
price = data['price'];
}else{
//display error getting data
}
}
});
// continue code for calculation
// this alert will display "0", but I want the price from the database in there
alert(price);
//perhaps do other ajax calls for other bits of data
//...
return final_price;
}
Кто-нибудь знает, как это сделать, обновляя переменные с помощью ajax в реальном времени??
Большое спасибо!
** РЕДАКТИРОВАТЬ **
Спасибо всем за помощь, я понимаю, что ajax является асинхронным. Мне бы очень хотелось получить ответ, в котором мне не нужно продолжать вычисления внутри функции success
, потому что моя реальная проблема включает в себя множество значений из нескольких разных таблиц. Я также хотел бы иметь возможность расширить расчет в будущем, не становясь слишком запутанным. Если это невозможно, то мне придется с этим жить.
;-)
** EDIT 2 **
Хорошо, мы получили ответ: конечно, он находится прямо в верхней части страницы документации, :-/ извините за это. Свойство async
в ajax-вызове jQuery. http://api.jquery.com/jQuery.ajax/