很抱歉,如果我在问题中犯了一些js条款的错误。
我试图在同一名称空间内的$ .ajax成功事件中调用一个方法,这是演示:
"use strict";
var example = window.example || {};
example.Demo = {
doSomething: function(data) {
console.log(data);
},
main: function() {
$(document).ready(function() {
$.ajax({
url: 'url/to/some/place',
type: 'GET',
async: true,
dataType: "json",
success: function (data) {
this.doSomething(data);
}
});
});
},
};
example.Demo.main()
但它会因以下错误而失败:
对象#没有方法' doSomething',
似乎这可行:
...
main: function() {
var that = this;
...
...
success: function (data) {
that.doSomething(data);
...
但我想知道这种情况是否有最佳做法,或者这是正确的解决方案。
答案 0 :(得分:3)
默认情况下它指的是ajax设置,你可以使用上下文来传递一个自定义对象
此对象将成为所有与Ajax相关的回调的上下文。通过 默认情况下,上下文是表示ajax设置的对象 在调用中使用($ .ajaxSettings与传递给的设置合并 $就)。
example.Demo = {
doSomething: function (data) {
console.log(data);
},
main: function () {
//don't use dom ready handler here
$.ajax({
url: 'url/to/some/place',
type: 'GET',
//see the use of context
context: this,
async: true,
dataType: "json",
success: function (data) {
this.doSomething(data);
}
});
},
};
答案 1 :(得分:1)
在JavaScript this
中始终引用我们正在执行的函数的“owner”
,或者更确切地说,指向函数是其方法的对象。当我们在页面中定义忠实函数doSomething()
时,它的所有者是页面,或者更确切地说,是JavaScript的窗口对象(或全局对象)。但是,onclick属性由它所属的HTML元素拥有。
这"所有权"是JavaScript面向对象方法的结果。有关更多信息,请参阅Objects as associative阵列页面。
答案 2 :(得分:0)
删除主要内部的$(document).ready(function(){...
,这将解决问题