Ajax .done()不能为我合作

时间:2015-10-24 17:15:17

标签: javascript jquery ajax jquery-callback

我有一个非常奇怪的情况。我有一个AJAX函数,它将表单数据发送到php codeigniter控制器,在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()放入其中,但现在很明显它没有响应。有没有其他方法可以做到这一点或代码中的任何更正? 请注意,相同的代码在另一台服务器上运行正常。这是在迁移后发生的。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

非常感谢您的善意信息 @DFreind @JonathanLonowski ,有了您的提示,我终于想出了这个问题花了我差不多3天。 实际上,当我仔细查看PHP生成的html时,它说:     1 {"响应":200,"数据":null,"消息":null}

这&#39; 1&#39;在生成JSON字符串之前无法修改标头错误! 经过多方努力,我刚看到一个纯粹的该死的&#39; 1&#39;就在我的控制器的第一行打开<?php标签之前。删除这个&#39; 1&#39;工作就像一个魅力,所有的错误都消失了,生命得到了拯救,现在在天堂加药: - )

对研究人员的指示:如果您遇到类似的错误,请安装Firebug并始终查看响应标头,尝试进行试验。大多数情况下PHP错误会导致输出混乱。在我的情况下,已经发送了&#39;标题&#39;生成错误是因为在php启动输出之前,html进来了。请注意任何echo()或set_cookie()函数!

感谢各位StackOverflowish极客:)