天天看點

prototype.js ajax.request,javascript – Prototype和Ajax.Request範圍

我在原型的Ajax.Request類中擷取正确的範圍時遇到了麻煩.我要做的是編寫一個包含ajax請求的簡單API:

API = Class.create({

initialize:function(api_token)

{

this.api_token = api_token;

this.request_uri = new Template('/api/#{api_token}/#{resource}.json');

this.status = 0;

this.last_result = null;

},

some_api_call:function()

{

var result = this._request('resource', {'id':1});

// and so on...

},

_request:function(resource, params)

{

var uri = this.request_uri.evaluate({"api_token":this.api_token,"resource":resource});

new Ajax.Request(uri,

{

contentType:'application/json',

method:'get',

parameters:params,

onSuccess:function(r)

{

alert(this);

this.last_result = r.responseJSON;

this.status = r.status;

}

});

return this.last_result;

}

});

當我在onSuccess()方法中時,我希望這可以引用父對象,但它給了我DOMWindow.我似乎無法将響應資料放入API類中.我認為這是一個愚蠢的事情(綁定?),但我今天似乎無法想到這一點.

謝謝

解決方法:

好的.我錯過了更大的問題.我是異步請求是以它設定結果,而不是立即.公平地說,這也是一個具有限制力的問題.這是正确的要求:

_request:function(resource, params)

{

var uri = this.request_uri.evaluate({"api_token":this.api_token,"resource":resource});

new Ajax.Request(uri,

{

asynchronous: false,

contentType:'application/json',

method:'get',

parameters:params,

onSuccess:function(r)

{

this.last_result = r.responseJSON;

this.status = r.status;

}.bind(this)

});

alert(this.status);

return this.last_result;

}

标簽:javascript,ajax,prototypejs

來源: https://codeday.me/bug/20190726/1548000.html