Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ajax使用回调函数返回值_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript Ajax使用回调函数返回值

Javascript Ajax使用回调函数返回值,javascript,jquery,ajax,Javascript,Jquery,Ajax,我修改了代码,使用回调函数返回值,但我认为仍然存在错误。我无法从回调中访问该值,即使它返回一个值,正如我在控制台日志中看到的那样 Javascript function postToServer(ajaxSuccessFn) { var Employee = { //some data }; console.log('inside post to server'); try { dojo.xhrPost({

我修改了代码,使用回调函数返回值,但我认为仍然存在错误。我无法从回调中访问该值,即使它返回一个值,正如我在控制台日志中看到的那样

Javascript

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请求的结果后手动处理重定向。