प्रोटोटाइप और Ajax.Request गुंजाइश

वोट
3

मैं मुसीबत के प्रोटोटाइप के Ajax.Request वर्ग के भीतर सही गुंजाइश हो रही हो रही है। मुझे क्या करना कोशिश कर रहा हूँ एक सरल एपीआई जो ajax अनुरोध लपेटता बारे में है:

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 दे रहा है। मैं एपीआई वर्ग में है कि प्रतिक्रिया डेटा प्राप्त नहीं कर पा रहे। मैं समझ यह कुछ बेवकूफ (बंधन?) है, लेकिन मैं सिर्फ इस एक बाहर आज लगता है कि नहीं कर पा रहे।

धन्यवाद

21/05/2009 को 14:59
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
8

ठीक है। मैं बड़ा समस्या याद किया। मैं अतुल्यकालिक रूप से अनुरोध कर रही थी तो यह था परिणाम की स्थापना, बस तुरंत नहीं। निष्पक्ष बनाने के लिए है, यह भी एक बाध्यकारी मुद्दा था। यहाँ उचित अनुरोध है:

_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;
}
21/05/2009 को 15:20
का स्रोत उपयोगकर्ता

वोट
0

आपका समाधान काम नहीं करना चाहिए?

आप नेस्टेड समारोह ऊपर स्थानीय चर का उपयोग करें और फिर उन्हें 'इस' गुंजाइश में परिवर्तित करने की जरूरत है:

 _request:function(resource, params)
    {
      var uri = this.request_uri.evaluate({"api_token":this.api_token,"resource":resource});
      var last_result = "";
      var status = "";
      new Ajax.Request(uri,
      {
        asynchronous: false,
        contentType:'application/json',
        method:'get',
        parameters:params,
        onSuccess:function(r)
        {
          last_result = r.responseJSON;
          status = r.status;
        }
      });  
      this.last_result = last_result;
      this.status = status;  
      alert(this.status);
      return this.last_result;
    }
07/03/2014 को 19:14
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more