0

我下面的“值”变量没有被继承到第二次调用中。重建它以使其工作的推荐方法是什么?

首先,我从我们的数据表中获取所有数据。然后,我需要从一个完全不同的数据库(更改控制)中获取待处理的更改。如果存在,我需要显示第二个数据。

function getData(appid) {
  $.ajax({
    url: 'services/getData',
    type: 'GET',
    data: { 'appid': appid },
    dataType: 'json',
    success: function (data) {
        var field1Value = data.field1;
        var field2Value = data.field2;
        var field3Value = data.field3;

        //get pending changes
        $.ajax({
            url: 'services/getPendingChanges',
            type: 'GET',
            data: { 'appid': appid },
            dataType: 'json',
            success: function (data2) {
                if (data2.field1 <> '') { field1value = data2.field1 };
                if (data2.field2 <> '') { field1value = data2.field2 };
                if (data2.field2 <> '') { field1value = data2.field2 };
            },
            complete: function () {
                //set data in UI regardless of whether it came from getData or getPendingChanges
                $('#txtField1').html(field1value);
                $('#txtField2').html(field2value);
                $('#txtField3').html(field3value);
            }
        })
    }
  })
}

当然,当我这样做时,所有“*value”变量都是未定义的。

4

2 回答 2

0

我最终隐藏了这些字段,然后从第一个完整中调用了第二个 ajax。我将字段设置为第一次调用的成功以及第二次调用的成功(如果存在)。然后我在第二个完成时取消隐藏它们。

function getData(appid) {
  $('#txtField1').hide();
  $('#txtField2').hide();
  $('#txtField3').hide();
  $.ajax({
    url: 'services/getData',
    type: 'GET',
    data: { 'appid': appid },
    dataType: 'json',
    success: function (data) {
        var field1Value = data.field1;
        var field2Value = data.field2;
        var field3Value = data.field3;
        $('#txtField1').html(field1value);
        $('#txtField2').html(field2value);
        $('#txtField3').html(field3value);
    },
    complete: function () {
        //get pending changes
        $.ajax({
            url: 'services/getPendingChanges',
            type: 'GET',
            data: { 'appid': appid },
            dataType: 'json',
            success: function (data2) {
                if (data2.field1 <> '') { 
                    field1value = data2.field1 
                    $('#txtField1').html(field1value);
                };
                if (data2.field2 <> '') { 
                    field2value = data2.field2 
                    $('#txtField2').html(field2value);
                };
                if (data2.field3 <> '') { 
                    field3value = data2.field3 
                    $('#txtField3').html(field3value);
                };
            },
            complete: function () {
                $('#txtField1').show();
                $('#txtField2').show();
                $('#txtField3').show();
            }
        })
    }
  })
}

最终,我没有隐藏它们,而是用加载指示器将它们换掉。此外,我意识到最好的办法是拥有一个在后台执行所有逻辑并返回适当数据的单一 Web 服务。

于 2013-08-06T18:48:53.537 回答
0

不确定这是否对您有帮助(可能不会),但这是我在 Javascript 中学到的。但是 javascript 中匿名类的性质是,您可以使用它们而不必担心变量冲突。最简单的方法是汇集到更高范围的变量以供以后使用。但这通常是不好的做法......所以你可以把所有这些都扔掉......

于 2013-08-05T20:16:14.700 回答