2014-04-29 67 views
-1

我正在調用與我的函數中的if語句連接的子函數。雖然子函數返回true或false,這是行不通的Javascript函數如果爲真

if (functionAAA()){ 
     alert("111111111"); 

     if (functionBBB()){ 
         alert("2222222"); 

      if (functionCCC()){ 
          alert("333333333333"); 



      }    
     } 
    } 

functionAAA,functionBBB,functionCCC返回true。我期待得到這些警報,但他們不工作。我究竟做錯了什麼?

我認爲這個問題是功能方面.. functionAAA定義是

function functionAAA(){ 
    var indexId = 1; 

    var dataItem = datasourceAppList.at(indexId); 
    var deviceKey = localStorage.getItem('LsDeviceKey'); 
    var baseUrl = localStorage.getItem('LsBaseUrl');  
    var errorMessageInfoText; 
    var status 

    $.ajax({ 

     url: baseUrl + '/test/cloud/FE/1.0/test.php', 
     data: { 
      PAR1: dataItem.par1, 
      PAR2: dataItem.par2, 
      PAR3: deviceKey, 
      PAR4: dataItem.par3, 
      PAR5: "5664456" 
     }, 
     type: 'GET', 
     crossDomain: true, 
     dataType: 'jsonp', 
     error: function() { 
      showErrorDialog("Key Validation Failure");; 
     } 

    }).done(function (data) { 

     $.each(data, function (k, v) { 

      // alert("k " + k + " v " + v); 
      if (k == 'STATUS') { 
       status = v; 
      } else if (k == 'ERROR_MESSAGE') { 

       errorMessageInfoText = v; 
      } 
     }) 


     if (status == 'TRUE') { 
      alert("ok"); 
      return true; 

     } else { 
      return false; 
     }; 

    });  

} 

其他功能直接返回true;

順便說一下,我收到了 「OK」 警報的功能

+1

然後讓我們來看看這些功能。你可以在這裏發佈嗎? –

+1

[問題不在於此代碼](http://jsfiddle.net/A9aTU/) – Chuck

回答

1

您需要重構您的代碼。 .done()內的匿名功能在functionAAA已完成並返回undefined後執行。畢竟,AJAX調用是異步的。

$.ajax返回一個promise,這樣一個選擇是使用​​:

function functionAAA(){ 
    return $.ajax({ 
     url: 'http://jsfiddle.net/echo/jsonp/', 
     dataType: 'jsonp', 
    }); 
} 

functionAAA().then(function() { 
    alert("111111111"); 
    if (functionBBB()){ 
     alert("2222222"); 
     if (functionCCC()){ 
      alert("333333333333"); 
     }    
    } 
}); 

看到它的行動on JSFiddle

+0

感謝您的詳細解答 – Calipso

+0

沒問題,樂於幫忙。 –

-3

試...

if (functionAAA()){ 
      alert("111111111"); 

      if (functionBBB()){ 
          alert("2222222"); 

       else if (functionCCC()){ 
           alert("333333333333"); 



       }    
      } 
     } 
0

下面的腳本對我的作品。你可以發佈你的functionAAA,BBB等嗎?

<script> 
    function functionAAA() { 
     return true; 
    } 
    if(functionAAA()){ 
     alert("hi"); 
    } 
    </script> 
0

添加這一點,並讓你的Ajax調用同步,因此等待響應,檢查它,並返回相應的true/false。現在它不應該返回任何東西。

async: false 
1

你的函數不返回任何東西。你不能進行異步調用並返回結果 - 這就是異步的意思。如果你想在ajax調用完成後做些事情,你需要給這個函數一個回調函數,並且調用它而不是試圖從ajax處理函數返回。