在jquery中调用AJAX后更新变量

时间:2013-04-18 12:51:03

标签: forms jquery django-forms

我想创建一个页面,无论用户是否在(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();
    });

1 个答案:

答案 0 :(得分:0)

“$('#id_second_metric')。load(update_url)”异步发生。无法保证在$('#id_second_metric')之前调用“$('#second_metric_selector')。change()”。load(update_url)“完成。

您可以使用load提供的回调函数来保证订单。见http://api.jquery.com/load/