Calling a parent method inside a function with a callback handler

I call ParentObject.doSomething (), which inturn calls the WebService object to make some ajax calls, and when the ajax call succeeds, the callback function is executed. But any parent function inside the callback function does not work.

I think this has something to do with resolving the area. I can not find a workaround for this problem.

Is there a better architectural style for modulating services and ajax model?

I also created jsfiddle - http://jsfiddle.net/bzKXr/2/

var ParentObject =  {

     doSomething: function(){
         document.write("Inside doSomething <br />");
         var self = this;
         WebServices.firstService("some URL", self.successCallback);
     },

     changeData: function(data){
         //Manipulate data
         document.write("Inside changeData <br />");
     },

     successCallback: function(jsonData){
         document.write("Inside successCallback <br />");
         try {
             //Execution fails at this point. Possibly because of scope resolution
             this.changeData(jsonData);  
         }
         catch (error) {
             console.log(error);
             document.write(error);
         }  
     },
};

var WebServices = {
    firstService: function(url, successCallbackHandler){
        document.write("Inside firstService <br />");
        //Get data using the URL
        //on success call successCallback
        successCallbackHandler("some data");
    }
};


$(document).ready(function() {
    ParentObject.doSomething();

});
+5
source share
5 answers

self.successCallback self, self.successCallback(), .

, , self:

doSomething: function(){
     document.write("Inside doSomething <br />");
     var self = this;
     WebServices.firstService("some URL", function() {
        self.successCallback();
     });
 },

ES5 .bind(), , this successCallback :

doSomething: function(){
     document.write("Inside doSomething <br />");
     WebServices.firstService("some URL", this.successCallback.bind(this));
 },
+9

:

WebServices.firstService("some URL", this.successCallback.bind( this ));

-. (: IE8 )

jQuery $.proxy:

WebServices.firstService("some URL", $.proxy( this.successCallback, this ));
+2

, this . javascript, foo.bar(), this ​​ foo, foo(), this , , , WebService. , . this.changeData(jsonData); ParentObject.changeData(jsonData);. Closures , , , ParenObject.

:

var ParentObject =  {

    doSomething: function(){
        document.write("Inside doSomething <br />");
        var self = this;
        WebServices.firstService("some URL", function(jsonData) {
            document.write("Inside successCallback <br />");
            self.changeData(jsonData);
        }
    },

    changeData: function(data){
        //Manipulate data
        document.write("Inside changeData <br />");
    }
};

doSomething, self, , self.changeData().

+1

this.changeData(jsonData); ParentObject.changeData(jsonData);, .

, this ParentObject, AJAX.

, this ( that) , that.changeData(jsonData);

0

-

WebServices.firstService("some URL", self.successCallback);

to

WebServices.firstService("some URL", function(data){ return self.successCallback(data) });

, , Python, Javascript Javascript , - .

0

All Articles