![](/img/trans.png)
[英]How can I pass a variable parameter to an anonymous function using jquery?
[英]How can I pass variable in javascript without using parameter?
我有一個函數用於從文本文件獲取數據並在另一個函數中發出警報。
var library_name; // Global Variable
function getLibraryName(){
jQuery.get('stream.txt', function(data) {
library_name = data.toString().substring(17,data.length);
});
}
function saveFeedback() {
alert(library_name);
}
調用saveFeedback時,它將警告library_name
我試圖把它放在這樣的相同功能中
function saveFeedback() {
jQuery.get('stream.txt', function(data) {
library_name = data.toString().substring(17,data.length);
});
alert(library_name);
}
但仍然在控制台中說undefined
如何解決呢? 不使用參數,因為必須從其他地方調用saveFeedback函數。
.get
的第二個參數在獲取完成時被調用。 您說的是,“獲取stream.txt
並在完成時執行此功能”。 獲取完成后,以下調用saveFeedback:
function getLibraryName(){
jQuery.get('stream.txt', function(data) {
library_name = data.toString().substring(17,data.length);
saveFeedback();
});
}
由於get是異步的,因此您的解釋器將在saveFeedback
success
函數之前實例化saveFeedback
函數(盡管某些健全性檢查器(如JSLint)可能希望您在getLibraryName
之前定義saveFeedback
。
您應該在$ .get(data)回調中使用saveFeedback()函數,因為它是異步請求,並且您不知道何時完成。
您可以創建一個隱藏的輸入字段,並使用$ .data()將數據附加到該字段。
例如:
function getLibraryName(){
jQuery.get('stream.txt', function(data) {
var library_name = data.toString().substring(17,data.length);
$('#myHiddenField').data('library_name', library_name);
});
}
function saveFeedback() {
alert($('#myHiddenField').data('library_name'));
}
jQuery get
啟動一個異步調用。 異步意味着從中返回的結果將在稍后返回……可能會在很短的時間之后,可能會在幾秒鍾后返回。 啟動此呼叫后,代碼將立即進入下一行,這是您的警報。 該警報在異步調用返回之前發生,因此變量當然仍然是undefined
-尚未設置。
解決問題的一種方法可能是告訴jQuery使調用同步。 但這是錯誤的答案,因為它將在調用發生時阻止瀏覽器響應用戶交互。 相反,您需要調整對異步調用的看法。 基本概念是,不必像常規的程序配方那樣具有逐步執行功能的大功能(執行步驟1,步驟2,然后步驟3),而必須設置兩個不同的配方或代碼段:一種啟動ajax調用,然后退出 ,另一種響應ajax調用的結果。
現在,您已經具有兩個功能。 由於我已經解釋的原因,您無法將它們組合在一起。 但是,您可以將它們鏈接起來,也可以將它們封裝在另一個內部:
var library_name;
function saveFeedback() {
alert(library_name);
}
function getLibraryName(){
jQuery.get('stream.txt', function(data) {
library_name = data.toString().substring(17 ,data.length);
saveFeedback(); // this chains the two functions together
});
}
甚至更好:
var library_name;
function saveFeedback() {
alert(library_name);
}
function receiveLibraryName(data) {
library_name = data.toString().substring(17, data.length);
saveFeedback();
// additional statements here after saving
}
function getLibraryName(){
jQuery.get('stream.txt', receiveLibraryName);
}
關鍵是您不能像往常一樣在getLibraryName
函數中繼續下getLibraryName
語句。 在ajax調用之后,您希望采取的步驟必須在另一個函數內部:在回調函數本身中,或者在從回調函數調用的另一個函數中。
嘗試以下代碼:
var library_name;
function getLibraryName(){
jQuery.get('stream.txt', function(data) {
let lbName= data.toString().substring(17,data.length);
saveFeedback(lbName);
});
}
function saveFeedback(lbName) {
library_name = lbName; //If you are using library_name in other code
alert(library_name);
}
您必須在jquery.get之前定義一次library_name。 因為如果jquery.get不起作用,則在調用警報時將不會創建library_name。 請添加var library_name; 作為saveFeedback()的第一行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.