2013-08-05 52 views
0

下面我的「值」變量沒有被繼承到第二個調用。建議如何重建此方法以使其起作用?重構嵌套的ajax調用,所以變量的工作

首先,我從我們的數據表中獲取所有數據。然後,我需要從一個完全不同的數據庫(更改控制)中獲取未完成的更改。如果它存在,我需要顯示第二個數據。

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); 
      } 
     }) 
    } 
    }) 
} 

當然,當我這樣做時,所有「*值」變量都是未定義的。

回答

0

不確定這是否會幫助你(而且可能不會),但這是我在Javascript中學到的。但JavaScript中的匿名類的本質是,您可以使用它們而不用擔心變量衝突。最簡單的方法是通過稍後使用更高範圍的變量。但是這通常是不好的做法......所以你可以把所有的東西都包裝起來......

+0

你能舉個例子說明你對包裝的想法有什麼想法嗎?我嘗試將變量聲明移至功能級別,並且遇到同樣的問題。 –

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服務,它可以在後臺完成所有的邏輯並且只是返回適當的數據。