i've used prototype before, and i'm trying to learn jquery now. The problem: I have an object that makes an ajax call, and i want the success callback to call a function within my object. The problem is that inside the callback function, "this" does not point to my original class.
Example:
function C(){
this.loadData();
}
C.prototype.loadData = function(){
$.ajax({
url:"URL/",
dataType:'json',
success:this.dataRetreived
});
}
C.prototype.dataRetreived = function(JSON){
console.info(this);
console.info(JSON);
}
Using Prototype i'd could simply use .bind(this), but jquery has a different way of doing things..
1 Answer 1
There's a "proxy" method in jQuery 1.4 that's kind-of like "bind" in Prototype or Functional:
success: $.proxy(instanceOfC, C.prototype.dataRetrieved)
answered Feb 13, 2010 at 13:06
Pointy
415k62 gold badges600 silver badges633 bronze badges
Sign up to request clarification or add additional context in comments.
3 Comments
Quamis
i'm now testing this variant, seems that the .proxy does the trick... but it seems that my json string returned from the server is invalid....
window.JSON.parse('{ret:"d"}') seems to be considered invalid in firefox (tried thia in the firebug console and it raises SyntaxError: JSON.parse { message="JSON.parse", more...}. Any ideeas why is says that?Quamis
i've figured it out... seems like the valid syntax for json is
'{"ret":"d"}'...Quamis
also, there seems to ba an
context attribtue to the AJAX request, that does the same trick:)lang-js
function.bindas in Prototype is a standard part of ECMAScript Fifth Edition so you'll be able to use it anyway in the future without having to hack the function prototype.Function.prototypemyself, as I don't use Prototype). Between this, the Strict Mode fixes, and the addition of long-standard Mozilla features to the language, JavaScript is finally getting a bit less horrible.