jquery在上下文中调用JS方法

jquery invoke JS method in context

本文关键字:JS 方法 调用 上下文 jquery      更新时间:2023-09-26

我们在应用程序中使用jQuery进行AJAX调用。如何使用jQuery在特定上下文中创建方法?在dojo中,我们过去常常使用dojo.hitch()。jQuery中有类似的东西吗?下面是我们正在使用的示例代码。我需要在SampleMethod的上下文中执行success处理程序。以下代码应由于resultSetHandler在窗口上下文中不可用,因此给我一个例外。你能告诉我吗。

我们使用的是jQuery版本1.3.2

function SampleMethod(){
    this.invokeProcedure=function(procedurePath){
        $.ajax({
                type: "GET",
                url: procedurePath,
                dataType: "json",
                success: resultSetHandler,
                error: errorHandler
            });
    }
    this.resultSetHandler=function(args){
        //Handle the result
    }
    this.errorHandler=function(args){
        //Handle the result
    }
}
var sampleObj=new SampleMethod();
sampleObj.invokeProcedure('url');

只需保留this并将其封装在函数中:

this.invokeProcedure=function(procedurePath){
        var savedThis = this;
        $.ajax({
                type: "GET",
                url: procedurePath,
                dataType: "json",
                success: function() { savedThis.resultSetHandler(); },
                error: function() { savedThis.errorHandler(); }
            });
    }

(可能也应该将"success"函数参数传递给"resultSetHandler"。)


编辑—以上内容将在一般情况下处理这类问题,但@Blaster在评论中正确地指出,jQuery $.ajax机制提供了一个更简单的解决方案。可以在传入的参数对象中设置context属性,该值将用作回调的上下文。也就是说,添加:

context: this,

$.ajax参数对象将使事情像最初写的那样工作。

这个版本的jQuery已经过时了,您应该升级。您正在寻找的功能是jQuery.proxy,仅在1.4+中可用

如果你正在升级,尽管你应该考虑升级到最新版本,但你现在只落后于4个主要版本。

如果您在一个不允许升级3.5年前的库的环境中工作,请考虑为自己复制jQuery.proxy的源代码并使其正常工作。