什么是'这个'是指jquery的$ .ajax成功吗?

时间:2014-03-25 09:14:29

标签: javascript jquery ajax this

很抱歉,如果我在问题中犯了一些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);
...

但我想知道这种情况是否有最佳做法,或者这是正确的解决方案。

3 个答案:

答案 0 :(得分:3)

默认情况下它指的是ajax设置,你可以使用上下文来传递一个自定义对象

context

  

此对象将成为所有与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(){...,这将解决问题