Ajax .done()不能为我一起工作

Ajax .done() don't work together for me

本文关键字:一起 工作 不能 done Ajax      更新时间:2023-09-26

我有一个很奇怪的情况。我有一个AJAX函数,它将表单数据发送到php编码器控制器,在json响应上,它必须处理响应。第一部分是工作,但后面的部分,这是一个。done()函数,不工作,无论我尝试什么。下面是我的脚本:

var validator = $('#register-company-form').validate({
    rules: {
        title: {
            required: true,
            valueNotEquals: 0
        },
        /* rules here */
    },
    highlight: function (element) {
        $(element).closest('.form-field').addClass('error-field');
    },
    unhighlight: function (element){
        $(element).closest('.form-field').removeClass('error-field');
    },
    errorPlacement: function(error, element) {},
    submitHandler: function(form) {
        var formData = new FormData($(form)[0]);
        $.ajax({
            type: $(form).attr('method'),
            url: $(form).attr('action'),
            data: formData,
            dataType: 'json',
            cache: false,
            contentType: false,
            processData: false
        })
        .done(function (response) {
            $(".form-field").removeClass("error-field");
            $(".item-exists").hide();
            if(response.Response == 401) {
                 $("#company_email").closest('.form-field').addClass('error-field');
                 $("#company_email").closest(".form-field").find(".item-exists").show();
            } else if(response.Response == 402) {
                $("#personal_email").closest('.form-field').addClass('error-field');
                $("#personal_email").closest(".form-field").find(".item-exists").show();
            } else if(response.Response == 403) {
                $("#user_name").closest('.form-field').addClass('error-field');
                $("#user_name").closest(".form-field").find(".item-exists").show();
            } else if(response.Response == 200){
                /* load my view */
            }
        });
        return false;
    }
});

我的PHP脚本返回以下JSON响应:

{"响应":200年,"数据":空,"消息":零}

在得到这个响应后,我的.done()函数应该根据它采取行动并加载一个页面,但事实并非如此。我已经尝试将console.log()和alert()放入其中,但现在很明显它没有响应。是否有其他方法可以做到这一点或在代码中有任何更正?请注意,相同的代码在另一台服务器上确实运行良好。这是在迁移后发生的。

非常感谢你的帮助!

非常感谢您的善意信息@DFreind@JonathanLonowski,在您的提示下,我终于解决了这个问题,花了我将近3天的时间。实际上,当我仔细观察PHP生成的html时,它说:1{"响应":200年,"数据":空,"消息":零}

生成JSON字符串之前的'1'无法修改报头错误!经过大量的努力,我在控制器的第一行打开<?php标签之前看到了一个简单的"1"。去掉这个"1"就像施了魔法一样,所有的错误都消失了,生命得救了,现在在天堂的剂量:-)

给研究人员的指示:请安装Firebug,如果你面临类似的错误,总是查看响应头,尝试试验。大多数情况下,PHP错误会干扰您的输出。在我的情况下,'headers already sent'错误产生,因为在php开始输出之前,html进来了。还要注意任何echo()或set_cookie()函数!

谢谢你们所有的StackOverflowish极客:)