2014-03-02 56 views
0

我想覆蓋從ajax調用status變量..我試圖以這種方式,但它不覆蓋status變量...請幫助我。從ajax調用覆蓋javascript變量

function myfunction() 
      { 
       var status = ""; 
       $.ajax({ 
        type: 'POST', 
        url: "<?php echo base_url() ?>login/ajaxsessioncheck/", 
        success: function(data) 
        { 
          status="new value"; 

        } 
       }); 
       alert(status) 
      return status; 
      } 
+2

你不能做到這一點 - http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call –

+2

不能從返回這樣的異步功能。 – adeneo

+0

@adeneo所以如何以其他方式解決這個問題?我真的需要解決這個 –

回答

1

您對AJAX調用的工作原理缺乏基本的瞭解。 AJAX調用是異步的。呼叫正在處理時,您的代碼會繼續執行。成功回調中的代碼只會在當前執行代碼完成後(當JavaScript放棄控制權返回給瀏覽器時)以及AJAX請求完成時執行。如果您將狀態=「新值」後的警報,您會看到它獲得正確的值。

+0

感謝您的支持.. –

2

一個可能的解決辦法是這樣的,

function ajaxsessioncheck(myCallback) 
      { 
       var status = ""; 
       $.ajax({ 
        type: 'POST', 
        url: "<?php echo base_url() ?>login/ajaxsessioncheck/", 
        success: function(data) 
        { 
          //status="new value"; 
         myCallback(data); 

        } 
       }); 
//    alert(status) 
//   return status; 
      } 

所以,你可能想要做的是,

if(ajaxsessioncheck()){ 
//then session still exists 
} 

,但你實際上應該這樣做,

ajaxsessioncheck(function(data){ 

    status = "new value"; 
    alert(status); 
//go to next page 
//or do next action that is only allowed if session still exists 

}); 

此外,Arun P Johny在評論中提到的線程How do I return the response from an asynchronous call?提供了一個徹底的探究如何解決這個特定問題以及與Ajax請求的同步和異步行爲有關的問題。

+0

好吧,我正在閱讀你的答案和所有發佈的鏈接.. –

-1

FIDDLE

AJAX調用是異步默認情況下,所以當你return statusstatus新值可能是未設置。或者讓你的ajax調用同步,或者在外部範圍中定義status變量,然後在成功回調中設置它。

var status = ""; 
alert(status);  
function ajaxsessioncheck(){ 
    $.ajax({ 
     type: 'POST', 
     url: "<?php echo base_url() ?>login/ajaxsessioncheck/", 
     success: function(data){ 
       status="new value"; 
       alert(status); 
       // write code for additional functionality that needs to be executed after the new value has been set for status here.. of just make a call to another function that handles further operations.. 
       doSomethingWithNewStatus(); 
     } 
    }); 
} 

ajaxsessioncheck(); 


function doSomethingWithNewStatus() { 
alert("Here is your new status " + status); 
} 
+0

所以基本上兩次檢查.. ajaxsessioncheck(),我認爲這會讓我的應用程序變慢..你說什麼? –

+0

我嚴重懷疑上述將工作... – Tallmaris

+0

@Tallmaris檢查小提琴,以確保:) –