2016-07-26 111 views
-1

我有以下代碼,它對選擇框更改的事件起作用。 當它發生變化時,ajax調用會將結果傳遞給變量result。 我的問題是,我無法獲得這個功能以外的數據。Javascript jquery選擇更改獲取結果並傳遞到外面

代碼:

$('#myselect').on('change', function() { 
    $.ajax({ 
     url: 'myurl'+this.value, 
     method: 'GET', 
     success: function(result) { 
      console.log(result); //Just checking it's there 
      external = result; 
     } 
    }); 
}); 

console.log(external); //Returning Undefined 

我需要external可用這裏上面的功能外。

我該怎麼做?

+0

可能重複[如何從異步調用返回響應?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an -asynchronous-call) –

回答

2

您可以將事件之外,比它的訪問之外創建的變量。但隨着ajaxascychron,變量仍然是undefined

var external; 

$('#myselect').on('change', function() { 
    $.ajax({ 
     url: 'myurl' + this.value, 
     method: 'GET', 
     success: function(result) { 
      external = result; 
     } 
    }); 
}); 

// this would be still undefined 
console.log(external); 

你可以寫你的console.log裏面success,或者創建自己的回調函數。然後,您可以在請求ajax之後記錄或處理數據。

$('#myselect').on('change', function() { 
    $.ajax({ 
     url: 'myurl' + this.value, 
     method: 'GET', 
     success: function(result) { 
      myCallback(result); 
     } 
    }); 
}); 

function myCallback(external) { 
    console.log(external); 
} 

更短,纔有可能在這個例子中,如果你直接使用你的回調函數爲success回調沒有包裝。而且由於GET是默認請求類型,我們可以刪除它太:

$('#myselect').on('change', function() { 
    $.ajax({ 
     url: 'myurl' + this.value, 
     success: myCallback 
    }); 
}); 

function myCallback(external) { 
    console.log(external); 
} 
0

對不起,如果我誤解了問題:

這聽起來像什麼是你正試圖從external獲取數據,但AJAX調用沒有調用的回調還,所以數據尚未設置。

如果我可以推薦如何解決它,請調用從回調本身引用外部的代碼,以便您可以保證在需要時獲得數據。

-1

定義變量外部你的第一個功能上面,像這樣:

var external; 

$('#myselect').on('change', function() { 


    $.ajax({ 
     url: 'myurl'+this.value, 
     method: 'GET', 
     success: function(result) { 

     console.log(result); //Just checking it's there 

     external = result; 


     } 

    }); 

}); 


console.log(external); 
+0

但是'console.log(external);'仍然會打印'undefined'。 ;) – eisbehr

+0

這是完全錯誤的。 –

0

你不能因爲它的ajax完成後進來的畫面來訪問變量,而您試圖直接訪問它,因爲你不」噸有任何想法,這AJAX如何確切的時間花費每一次,所以你需要像這樣定義

$('#myselect').on('change', function() { 
    $.ajax({ 
     url: 'myurl'+this.value, 
     method: 'GET', 
     success: function(result) { 
     console.log(result); //Just checking it's there 
     saySomething(result); //result will be injected in this function after ajax completion 
    }); 
}); 

function saySomething(msg) { 
    console.log(msg); //use variable like this 
} 
0

我希望我的代碼對您有所幫助的功能。

$('#myselect').on('change', function() { 
    $.ajax({ 
     url: 'myurl'+this.value, 
     method: 'GET', 
     async: false, // stop execution until response not come. 
     success: function(result) { 
      console.log(result); //Just checking it's there 
      external = result; 
     } 
    }); 
}); 

console.log(external); //now it should return value 
相關問題