完成ajax请求后,Jquery将对象解析为

时间:2015-05-17 11:10:51

标签: javascript jquery ajax

我有一个在表单提交后运行的代码。它是基于AJAX的请求。 我遇到的问题是FormSubmit函数Validation.done(function(){我收到错误消息说未捕获TypeError:Validation.done不是函数。但如果你查看FormValidate函数,它会返回deferredObject.promise 在ajax完成或失败时解决或拒绝。

那么问题在哪里?

当用户提交表单时,我们会执行操作:

$(document).ready(function() {
    $("#NewOrder").submit(function (e){
        e.preventDefault();
        FormSubmit("NewOrder");
        return false;
    });
});

function FormSubmit(FormId)
{
    var Validation = FormValidate(FormId);
    Validation.done(function(){
       //Do stuff if validation succeeded
    });
}

FormValidate功能:

function FormValidate(FormId)
{
    var deferredObject = $.Deferred();

    var url = "../../ajax/FormValidate";
    var data = {};

    var promise = AjaxRequest(url, data);

    promise.done(function(response) {
        var resultArray = JSON.parse(response);
        var FormEntity = $('#'+FormId).attr('entity');

        if($.isEmptyObject(resultArray)){
            deferredObject.resolve();
        }
        else{
            $.each(resultArray, function( key, value ) {                
                $( "div#"+key+"_validation" ).text(value);              
            });         
            deferredObject.reject();
        }
    });

    promise.fail(function(response) {
        deferredObject.reject();
        console.log(response);      
    });

    return deferredObject.promise;
}

AjaxRequest功能:

function AjaxRequest(url, data)
{
    var deferredObject = $.Deferred();

    var request = $.ajax({
        url: url,
        type: "POST",
        data: data,
    });

    request.done(function (response){
        deferredObject.resolve(response);
    });

    request.fail(function (response){
        deferredObject.reject(response);
    });

    return deferredObject.promise();
}

2 个答案:

答案 0 :(得分:2)

deferredObject.promise是一个功能。你需要打电话来获得承诺。

return deferredObject.promise();

答案 1 :(得分:0)

您正在大量使用deferred antipattern。在给定的解决/拒绝承诺上显式构建延迟并使用.done.fail处理程序,而不是使用.then方法:

function FormValidate(FormId) {
    var url = "../../ajax/FormValidate";
    var data = {};

    return AjaxRequest(url, data).then(function(response) {
        var resultArray = JSON.parse(response);
        var FormEntity = $('#'+FormId).attr('entity');

        if ($.isEmptyObject(resultArray)) return; // resolve with undefined
        $.each(resultArray, function(key, value) {
            $("div#"+key+"_validation").text(value);
        });
        return $.Deferred().reject(resultArray); // if not empty
    }, console.log.bind(console));
}

function AjaxRequest(url, data) {
    return $.ajax({
        url: url,
        type: "POST",
        data: data,
    });
}

然后,那些.promise()来电的错字也不会发生: - )