![](/img/trans.png)
[英]On ajax success set variable and use the variable in jquery outside ajax
[英]Set variable outside AJAX request
我正在嘗試創建一個從頁面返回特定字符串的ajax函數,然后在我創建的類中設置它。 但是,當我嘗試在ajax success參數中調用this.setGlideUser
,它會告訴我
object has no function setUserGlide.
當我嘗試在success參數之外調用this.setUserGlide
,然后查看_glideUser
的值時, _glideUser
是未定義的。 這是我的代碼片段。
function main()
{
this.start = true;
}
main.prototype.load = function()
{
var _glideUser;
$.ajax(
{
url: '/home',
dataType: 'text',
success: function(data)
{
// Truncated
_glideUser = unescape(data).match(pattern);
}
});
this.setGlideUser(_glideUser);
return 1;
}
main.prototype.setGlideUser(user)
{
return this._glideUser = user;
}
main.prototype.getGlideUser()
{
return this._glideUser;
}
var _main = new main();
_main.load();
// check that the ajax has completely loaded
_main.getGlideUser(); // returns undefined
我想不出從Ajax成功函數中在主類中設置_glideUser
變量的方法。 我想在另一個函數中獲取_glideUser
的值,用它來做事。 有什么建議么?
沒有this._glideUser
,因為_glideUser
是您的load
函數的本地。 而不是在load
中聲明var _glideUser
,而是從構造函數中將其設置為公共屬性:
function main()
{
this.start = true;
this._glideUser = null;
}
(你第一次調用setGlideUser
實際上會創建一個這樣的屬性,但是這兩個屬性並不令人困惑嗎?)
另外,正如其他人提到的那樣,你在ajax操作完成之前嘗試setGlideUser
。 你需要從success
回調中做到這一點:
main.prototype.load = function()
{
var that = this;
$.ajax(
{
url: '/home',
dataType: 'text',
success: function(data)
{
that.setGlideUser(unescape(data).match(pattern));
}
});
return 1; // what's the point?
}
我對jQuery不是很熟悉,但是ajax請求可能是異步的,所以你必須從ajax成功調用中調用setGlideUser,只需在你的實例中添加一個引用變量並從那里調用它:
var self = this;
$.ajax(
{
url: '/home',
dataType: 'text',
success: function(data)
{
self.setGlideUser(unescape(data).match(pattern));
}
});
只是一個快速的提示,你可以像這樣在js中有getter和setter:
main.prototype.__defineSetter__("glideUser", function(value)
{
this._glideUser = value;
});
main.prototype.__defineGetter__("glideUser", function()
{
return this._glideUser;
});
編輯:實際上,請看那些東西的評論
在請求返回之前不會調用success
。 它是異步的 。 當數據值可用時,您需要在成功本身內調用該方法。
main.prototype.load = function()
{
var _glideUser, that = this;
$.ajax(
{
url: '/home',
dataType: 'text',
success: function(data)
{
// Truncated
var = _glideUser = unescape(data).match(pattern);
that.setGlideUser(_glideUser);
}
});
// this.setGlideUser(_glideUser); this is incorrect
return 1;
}
關鍵字這意味着當前范圍,在這個(雙關語)情況下是ajax對象。 您需要將外部此對象的引用,通過在外部對象分配我到這一點 。
main.prototype.load = function()
{
var _glideUser;
var me = this;
$.ajax(
{
url: '/home',
dataType: 'text',
success: function(data)
{
// Truncated
_glideUser = unescape(data).match(pattern);
me.setGlideUser(_glideUser);
}
});
return 1;
}
嘗試在ajax success參數中調用this.setGlideUser
那是對的。 但是,success方法中的this
關鍵字指向jqXHR對象而不是main
實例; 你需要取消引用它:
var that = this;
$.ajax({
url: '/home',
dataType: 'text',
success: function(data) {
_glideUser = unescape(data).match(pattern);
that.setGlideUser(_glideUser);
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.