I have the following js snippet:
<script language="javascript">
function test() {
this.a = 10;
};
test.prototype.next = function () {
alert('before: ' + this.a);
$.ajax({
url: 'some-url',
async: true,
type: 'POST',
dataType: 'json',
success: this.callback
});
};
test.prototype.callback = function () {
alert('after: ' + this.a);
};
$(document).ready(function () {
var test1 = new test();
test1.next();
});
</script>
It’s alway produce result:
before: 10
after: undefine.
Why in the callback function of $.post, properties of class are undefined. Could anyone help me? Thanks a lot.
This won’t work. You need to bind the callback to the instance (
this). Otherwise it will have lost its scope. The function alone will unfortunately not remember it.The manual way would be
and I cannot find the built-in helper that jQuery has for this right now. In CoffeeScript you’d just use the fat arrow
=>.Update: found the jQuery way: There is a parameter
contextthat you can specify for$.ajax, and that will becomethisfor all callbacks: