将一个对象的引用传递给jQuery中的回调函数。

16 浏览
0 Comments

将一个对象的引用传递给jQuery中的回调函数。

我有一段代码,代码如下:\n

$.post(self.baseUrl + 'api/method',
        {param1: data},
        function (response) {
            // 做一些事情
        });

\n我想将self对象的引用传递给回调函数,我原以为可以像这样做:\n

$.post(self.baseUrl + 'api/method',
        {param1: data},
        function (response, self) {
            // 做一些事情
        });

\n然而,这样做不起作用,jQuery文档中没有显示出这种可能性,而且我随便搜索了一下也没找到任何相关信息。是否有可能实现这个功能,如果可以,我该如何做?

0
0 Comments

为什么你想要这样做?

你可以很容易地使用闭包:

var param1 = data;
$.post(self.baseUrl + 'api/method', function (data) {
    // 在这里访问param1
});

这是在self变量表示的对象的方法内部,而在回调函数中,我实际上递归调用了这个方法,所以我需要通过引用传递。

实际上,如果你只是想要递归调用,你不需要引用。只需要记住这个范式:作用域中的每个变量都可以从每一行(在该作用域中)的任何地方访问 - 这是因为编译器将声明移到了顶部(但不包括赋值,可能稍后进行) - 参见这个例子jsfiddle.net/dittodhole/x359K

顺便说一句...递归可以在某些情况下用堆栈替换 - 因此这可能是更好的实现选项...

尽管如此:你不需要一个context - 这可以用闭包来实现!只需引入一个新变量(参见我的示例代码以获取更多提示)...

0
0 Comments

在这段代码中,有一个名为"fetchData"的方法,它通过使用jQuery的post方法来发送一个POST请求到指定的URL。在回调函数中,调用了"onDatafetch"方法和"globalDataFetch"方法。

问题的出现是因为在回调函数中,无法直接访问到"App"对象的属性和方法。在JavaScript中,回调函数是在一个不同的作用域中执行的,因此无法直接访问外部对象。

为了解决这个问题,可以使用两种方法。第一种方法是在"fetchData"方法中创建一个指向"App"对象的变量"self",然后在回调函数中使用这个变量来访问"App"对象的属性和方法。

另一种方法是将"App"对象作为参数传递给回调函数,并在回调函数中使用传递的对象来访问"App"对象的属性和方法。在这个例子中,"globalDataFetch"方法接收两个参数,分别是数据和对象。通过将"self"作为参数传递给"globalDataFetch"方法,可以在回调函数中访问"App"对象的属性和方法。

为了在回调函数中访问对象的属性和方法,可以通过创建一个指向对象的变量或将对象作为参数传递给回调函数。以下是修改后的代码:

var App = {
    baseUrl: "http://.../",
    fetchData: function() {
        var self = this;
        $.post(self.baseUrl + 'api/method', {
            param1: data
        }, function(data) {
            self.onDatafetch(data);
            //or
            globalDataFetch(data, self);
        });
    },
    onDatafetch: function(data) {
        this.showMsg();
    },
    showMsg: function() {
        alert("Success");
    }
}
App.fetchData();
function globalDataFetch(data, object){
   // received data and object
}

0
0 Comments

问题的出现原因:在使用jQuery的$.ajax方法时,需要将一个对象的引用传递给回调函数,以便在回调函数中使用该对象。

解决方法:可以通过在$.ajax方法中的context属性中指定对象的引用来解决这个问题。

文章内容如下:

如果您使用$.ajax方法,您可以指定一个上下文(context):

$.ajax({
    type: "post",
    context: self,
    data: {param1: data},
    success: function (response) {
        console.log(this); // 现在'this'指向self对象
    }
});

谢谢。这正是我想要的。

0