0

我们jQuery在我们的应用程序中使用进行 AJAX 调用。如何在特定上下文中使用 inovke 方法jQuery?在dojo我们曾经使用dojo.hitch(). jQuery中有类似的东西吗?下面是我们正在使用的示例代码。我需要successSampleMethod. 下面的代码应该给我例外,因为resultSetHandler在窗口上下文中不可用。你能告诉我吗。

我们使用的是1.3.2jQuery版本

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');
4

2 回答 2

2

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

如果您正在升级,但您应该考虑升级到最新版本,那么您现在只落后 4 个主要版本。

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

于 2012-07-10T18:23:24.037 回答
2

只需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参数对象会使事情像你最初写的那样工作。

于 2012-07-10T18:23:24.607 回答