Javascript Ajax使用回调函数返回值
我修改了代码,使用回调函数返回值,但我认为仍然存在错误。我无法从回调中访问该值,即使它返回一个值,正如我在控制台日志中看到的那样 JavascriptJavascript Ajax使用回调函数返回值,javascript,jquery,ajax,Javascript,Jquery,Ajax,我修改了代码,使用回调函数返回值,但我认为仍然存在错误。我无法从回调中访问该值,即使它返回一个值,正如我在控制台日志中看到的那样 Javascript function postToServer(ajaxSuccessFn) { var Employee = { //some data }; console.log('inside post to server'); try { dojo.xhrPost({
function postToServer(ajaxSuccessFn) {
var Employee = {
//some data
};
console.log('inside post to server');
try {
dojo.xhrPost({
url: 'hello',
content: Employee,
load: ajaxSuccessFn,
error: function (e) {
console.log('Error Occured ' + e);
}
});
} catch (e) {
console.log(e);
}
};
function handleServerResponse(containers, Callback) {
var formErrors = {
"errors": "yes",
"firstName": "1234",
"surname": "456",
"otherNames": "789",
"bSurname": "10025"
};
console.log('handling server error obj');
try {
$.each(formErrors, function (key, value) {
if (key == 'errors') {
hasErrors = value;
console.log('hasErrors set to ' + value);
}
});
} catch (e) {
console.log(e);
}
try {
if (hasErrors == true) {
//alert('form has errors');
for (var i = 0; i < containers.length; i++) {
console.log('Processing container number ' + i + ' with name ' + containers[i]);
var processingContainer = containers[i];
dojo.forEach(processingContainer.getChildren(), function (wid) {
var widgetName = wid.attr('id');
$.each(formErrors, function (key, value) {
if (key == widgetName && value.length > 0) {
var myWidget = dijit.byId(widgetName);
var wdgName = dijit.byId(widgetName).attr("id");
var myWidgetValue = value;
//console.log('Printing here '+wdgName +' : '+myWidgetValue);
myWidget.validator = function () {
console.log('Attribute Name is :' + wdgName + ' Error Value is : ' + myWidgetValue);
//console.log(wdgName + " : "+myWidgetValue);
this.set("invalidMessage", myWidgetValue);
};
myWidget._hasBeenBlurred = true;
myWidget.validate();
}
});
});
console.log('done ' + hasErrors);
}
}
} catch (e) {
console.log(e);
}
console.log('function returning hasErrors as ' + hasErrors);
return hasErrors;
}
function PostNameInformation() {
var containers = [byId("container1"), byId("container2")];
try {
var doesErrorsExist = postToServer(handleServerResponse(containers, function (args) {
return args;
}));
console.log('Were there any errors ' + doesErrorsExist);
} catch (e) {
console.log(e);
}
}
函数postToServer(ajaxSuccessFn){
var雇员={
//一些数据
};
log('inside post to server');
试一试{
dojo.xhrPost({
url:'你好',
内容:员工,
加载:ajax成功fn,
错误:函数(e){
console.log('发生错误'+e);
}
});
}捕获(e){
控制台日志(e);
}
};
函数handleServerResponse(容器、回调){
var formErrors={
“错误”:“是”,
“名字”:“1234”,
“姓氏”:“456”,
“其他名称”:“789”,
“bSurname”:“10025”
};
log('handling server error obj');
试一试{
$.each(格式错误、函数(键、值){
如果(键=='errors'){
hasErrors=值;
log('hasErrors设置为'+value');
}
});
}捕获(e){
控制台日志(e);
}
试一试{
if(hasErrors==true){
//警报(“表单有错误”);
对于(var i=0;i0){
var myWidget=dijit.byId(widgetName);
var wdgName=dijit.byId(widgetName.attr(“id”);
var myWidgetValue=值;
//log('Printing here'+wdgName+':'+myWidgetValue);
myWidget.validator=函数(){
log('属性名称为:'+wdgName+'错误值为:'+myWidgetValue);
//log(wdgName+:“+myWidgetValue);
此.set(“invalidMessage”,myWidgetValue);
};
myWidget.\u hasBeenBlurred=true;
myWidget.validate();
}
});
});
console.log('done'+hasrerrors);
}
}
}捕获(e){
控制台日志(e);
}
log('函数将hasErrors返回为'+hasErrors');
返回错误;
}
函数PostNameInformation(){
var containers=[byId(“container1”)、byId(“container2”);
试一试{
var doesErrorsExist=postToServer(handleServerResponse)(容器、函数(args){
返回args;
}));
console.log('是否有任何错误'+doesErrorsExist);
}捕获(e){
控制台日志(e);
}
}
虽然您可以在回调中返回某些内容,但在这种情况下,它将被完全忽略。我不知道你说的“阻止页面移动”是什么意思,但是在执行AJAX请求时,除了等待结果之外,你什么也做不了。您可以在启动请求时先停止页面“移动”,然后在调用成功回调后再重新阻止它。但是,从匿名请求成功回调中返回某些内容是没有意义的。我是否可以在回调函数中设置一个值并在函数外部访问它?返回true或false会阻止页面移动到另一个页面,因为调用另一个页面的函数会在之前执行ajax请求,如果有请求的话错误,然后它停止页面当然有。但最好直接调用另一个函数,而不是设置其他函数可以访问的变量。您不想开始使用globals来跟踪异步状态。那会打开潘多拉的盒子。相反,您需要开始考虑一些可以帮助您管理异步控制流的东西。承诺是实现这一点的一种方法,但不是唯一或必然是最好的方法。如果您想阻止在单击链接时导航到另一个页面,则需要调用event.preventDefault()
,然后在收到ajax请求的结果后手动处理重定向。