为什么我无法在ajax成功返回时访问render函数?也许我疯了但我以前做过这个。
它告诉我this.render不是函数吗?
DataItem.prototype = {
display: function () {
$('body').append(this.name + ": " + this.getData(this.rootData, this.subData) + "<br />");
},
getData: function (rootData, subData) {
$.ajax({
type: "GET",
url: "json/data.js",
data: "",
dataType: "json",
success: function (json){
this.render(json);
}
});
},
render: function (json) {
var res = [];
for(var i=0, t; t=json.log.entries[i]; i++) {
var p = t.request.url;
if (p!=undefined) res.push(p);
}
return res.length;
}
};
答案 0 :(得分:5)
当您尝试拨打this.render()
时,范围已更改。我相信this
包含ajax请求对象而不是DataItem
对象。
一个简单的解决方案是这样做:
getData: function (rootData, subData) {
var self = this;
$.ajax({
type: "GET",
url: "json/data.js",
data: "",
dataType: "json",
success: function (json){
self.render(json);
}
});
},
编辑:我错了,在成功函数中this
变量包含ajax请求的选项,但我的解决方案仍然正确。请参阅jQuery文档(http://docs.jquery.com/Ajax/jQuery.ajax#options)
答案 1 :(得分:1)
只需添加@adamse回答。如果要外部化success
函数而不是使用匿名函数,可以使用以下内容传递其他参数:
function handleSuccess(json) {
this.self.render(json);
}
$(function() {
$.ajax({
type: "GET",
url: "json/data.js",
data: "",
dataType: "json",
// pass an additional parameter to the success callback
self: this,
success: handleSuccess
});
});
答案 2 :(得分:0)
由于下面的代码有效(即打印出“abcd”),我不确定你面临的问题是什么,除非你要分享更多代码。
<script>
DataItem = function(){};
DataItem.prototype = {
display: function () {
return 'a';
},
getData: function () {
document.write(this.render());
return this;
},
render: function () { return "abcd"; }
};
di = new DataItem();
di.getData();
</script>