好吧,这可能是一个愚蠢的问题,但我找不到解决问题的方法。我有这个功能:
function getActivityObj(sysId, date) {
var activityObj = dojo.xhrGet({
url: 'calendar/display-subactivities',
content: {'sysId': sysId, 'date': date},
handleAs: 'json',
load: function(result) {
console.log(result);
},
error: function(){
alert("error");
}
});
var ajaxResponse = activityObj.ioArgs.xhr.response;
return ajaxResponse;
}
问题是我的ajaxResponse变量总是为空,但如果在firebug中,xhr对象的响应属性不为空。 我将在我的代码中的几个地方使用ajax响应,所以我做错了什么或者什么是更好的方式来调用ajax响应?谢谢。 (抱歉我的英语不好)
答案 0 :(得分:4)
我怀疑调用它时ajaxResponse
变量为空,因为xhrGet()
调用是异步调用的,当你设置ajaxResponse
并从中返回时,结果实际上不可用你的功能。
当你在firebug中查看它时,XHR响应已经完成,但是当代码执行时它就不存在了。
xhrGet()
会返回dojo.Deferred
个对象。您可以使用它来为实际完成时添加回调函数:
function getActivityObj(sysId, date) {
var activityObj = dojo.xhrGet({
url: 'calendar/display-subactivities',
content: {'sysId': sysId, 'date': date},
handleAs: 'json',
load: function(result) {
console.log(result);
},
error: function(){
alert("error");
}
});
var ajaxResponse;
// activityObj is a Deferred
activityObj.addCallback(function() {
// Use your deferred response
ajaxResponse = activityObj.ioArgs.xrh.response;
// Now inside this function, do whatever you were going to do
// with the xhr return data that you intended to return from
// the wrapping function.
});
}
我不确定是否有一种很好的方法将xhrGet()
调用包装在函数中并尝试返回响应,因为如果异步调用它将永远延迟。
如果在xhrGet()
调用实际返回数据之前阻止进一步执行是安全的,则可以同步调用它。然后你的代码将在没有延迟回调的情况下工作。相反,您通常会在xhrGet()
的{{1}}函数中执行返回数据的所有工作。
load()