0

我试图使用deferredhitch为我的 AJAX 请求提供回调。我正在使用以下代码:

//Code is executed from this function
function getContent(){
    var def = new dojo.Deferred();
    def.then(function(res){
    console.lod("DONE");
    console.log(res);
    },
    function(err){
        console.log("There was a problem...");
    });
    this.GET("path", def);
}

//Then GET is called to perform the AJAX request...
function GET(path, def){
dojo.xhrGet({
    url : path,
    load : dojo.hitch(def,function(res){
        this.resolve(res);  
    }),
    error : dojo.hitch(def, function(err){
        this.reject(err)
    })
})

}

但是,当我运行此代码时,我undefined methodthis.resolve(res). 我已经打印了两者this(解析为延迟对象)res并且两者都不是未定义的。为什么我会收到此错误以及如何实现我想要做的事情?

4

1 回答 1

1

ajax 方法(xhrGet 和 xhrPost)在执行时返回延迟对象。使用这个延迟对象,您可以在 ajax 请求完成时注册回调和错误回调处理程序

var deferred = dojo.xhrGet({url:'someUrl'});
deferred.then(dojo.hitch(this,this.someCallbackFunction),dojo.hitch(this,this.someErrorFunction));

使用此代码,someCallbackFunction将在您的 ajax 请求成功返回时调用,如果 ajax 请求返回错误,someErrorFunction将被调用。

对于您的特定代码片段,您的代码更新如下:

function getContent(){
    var resultFunction = function(res){
      console.lod("DONE");
      console.log(res);
    };
    var errorFunction = function(err){
      console.log("There was a problem...");
    };
    this.GET("path").then(dojo.hitch(this,resultFunction),dojo.hitch(this,errorFunction);
}

//Then GET is called to perform the AJAX request...
function GET(path){
  return dojo.xhrGet({
    url : path
  });
}
于 2012-06-22T13:56:00.573 回答