Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重新构造嵌套的ajax调用以使变量工作_Ajax_Variables_Inheritance_Nested - Fatal编程技术网

重新构造嵌套的ajax调用以使变量工作

重新构造嵌套的ajax调用以使变量工作,ajax,variables,inheritance,nested,Ajax,Variables,Inheritance,Nested,下面的“值”变量没有被继承到第二个调用中。建议用什么方法来重建它以使其工作 首先,我从数据表中获取所有数据。然后,我需要从一个完全不同的数据库(变更控制)获取挂起的变更。我需要显示第二个数据(如果存在) function getData(appid) { $.ajax({ url: 'services/getData', type: 'GET', data: { 'appid': appid }, dataType: 'json', success:

下面的“值”变量没有被继承到第二个调用中。建议用什么方法来重建它以使其工作

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

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);
            }
        })
    }
  })
}
函数getData(appid){
$.ajax({
url:“服务/getData”,
键入:“GET”,
数据:{'appid':appid},
数据类型:“json”,
成功:功能(数据){
var field1Value=data.field1;
var field2Value=data.field2;
var field3Value=data.field3;
//获取挂起的更改
$.ajax({
url:“服务/getPendingChanges”,
键入:“GET”,
数据:{'appid':appid},
数据类型:“json”,
成功:功能(数据2){
如果(data2.field1“”){field1value=data2.field1};
如果(data2.field2“”){field1value=data2.field2};
如果(data2.field2“”){field1value=data2.field2};
},
完成:函数(){
//在UI中设置数据,不管它是来自getData还是getPendingChanges
$('#txtField1').html(field1value);
$('#txtField2').html(field2value);
$('#txtField3').html(field3value);
}
})
}
})
}

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

不确定这是否会对您有所帮助(而且可能不会),但这是我在Javascript时代学到的。但是javascript中anon类的本质是,您可以使用它们而不用担心变量冲突。最简单的方法是将变量导入更高的范围,以便以后使用。但这通常是不好的做法。。。因此,您可以在所有这些内容周围添加一个包装器…

我最终隐藏了字段,然后从第一个字段的完整部分调用了第二个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();
            }
        })
    }
  })
}
函数getData(appid){
$('#txtField1').hide();
$('#txtField2').hide();
$('#txtField3').hide();
$.ajax({
url:“服务/getData”,
键入:“GET”,
数据:{'appid':appid},
数据类型:“json”,
成功:功能(数据){
var field1Value=data.field1;
var field2Value=data.field2;
var field3Value=data.field3;
$('#txtField1').html(field1value);
$('#txtField2').html(field2value);
$('#txtField3').html(field3value);
},
完成:函数(){
//获取挂起的更改
$.ajax({
url:“服务/getPendingChanges”,
键入:“GET”,
数据:{'appid':appid},
数据类型:“json”,
成功:功能(数据2){
如果(data2.field1“”){
field1value=data2.field1
$('#txtField1').html(field1value);
};
如果(data2.field2“”){
field2value=data2.field2
$('#txtField2').html(field2value);
};
如果(data2.field3“”){
field3value=data2.field3
$('#txtField3').html(field3value);
};
},
完成:函数(){
$('#txtField1').show();
$('#txtField2').show();
$('#txtField3').show();
}
})
}
})
}

最终,我不会隐藏它们,而是用一个加载指示器来交换它们。此外,我意识到最好的做法是使用一个web服务,它在后台执行所有逻辑,并返回适当的数据。

您能给我一个关于包装器想法的示例吗?我尝试将变量声明向上移动到函数级别,但遇到了同样的问题。