重新构造嵌套的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服务,它在后台执行所有逻辑,并返回适当的数据。您能给我一个关于包装器想法的示例吗?我尝试将变量声明向上移动到函数级别,但遇到了同样的问题。