我想创建一个页面,无论用户是否在(Django ModelChoice)表单上进行选择,然后这会导致另一个表单的Ajax更新,然后可能会触发额外的Ajax更新。我相当基本的javascript技能不能胜任任务!
问题是我无法正确阅读更新表格的价值 - 它总是落后于我认为它应该是的一步。在下面的简化示例中,就好像Jquery在first_var的同时计算second_var的值(即在我使用Ajax调用更新它之前)。如果我继续在#id_first_metric中的两个选项之间切换,second_var将更新,但它总是在上次更新之前指向#id_second_metric的值。
如何让second_var正确包含其新更新的值?
function first_function(first_var){
console.log('first var:' + first_var);
// correctly states the value of first var
var update_url = '/ajax/update_second_metric/first_var';
$('#id_second_metric').load(update_url);
$('#first_metric_selector').change(function () {
var first_var = $('#id_first_metric').val();
first_function(first_var);
$('#second_metric_selector').change();
});
$('#second_metric_selector').change(function () {
var second_var = $('#id_second_metric').val();
console.log('second var' + second_var);
// fails to detect the new value of second var created by the first
// AJAX call
});
ANSWER
function first_function(first_var){
console.log('first var:' + first_var);
// correctly states the value of first var
var update_url = '/ajax/update_second_metric/';
$('#id_second_metric').load(update_url, function(){
$('#second_metric_selector').change();
});
答案 0 :(得分:0)
“$('#id_second_metric')。load(update_url)”异步发生。无法保证在$('#id_second_metric')之前调用“$('#second_metric_selector')。change()”。load(update_url)“完成。
您可以使用load提供的回调函数来保证订单。见http://api.jquery.com/load/