gpt4 book ai didi

javascript - 如何在 Dojo 中管理 ajax 响应

转载 作者:行者123 更新时间:2023-11-30 10:47:17 25 4
gpt4 key购买 nike

好吧,这可能是个愚蠢的问题,但我找不到解决问题的方法。我有这个功能:

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 对象的 response 属性不为空。我将在我的代码中的几个地方使用 ajax 响应,那么我做错了什么或者调用 ajax 响应的更好方法是什么?谢谢。 (抱歉我的英语不好)

最佳答案

我怀疑 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()load() 函数中执行返回数据预期的任何工作。

var activityObj = dojo.xhrGet({
// Call synchronously
sync: true,
url: 'calendar/display- subactivities',
content: {'sysId': sysId, 'date': date},
// etc...

关于javascript - 如何在 Dojo 中管理 ajax 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7556826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com