簡體   English   中英

Ajax .done()對我不起作用

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

我的情況很奇怪。 我有一個AJAX函數,它將JSON響應上的表單數據發送到php codeigniter控制器,它必須處理響應。 第一部分工作正常,但是后面的部分是.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響應:

{“ Response”:200,“ Data”:null,“ Message”:null}

收到此響應后,我的.done()函數應該按照它的作用並加載一個頁面,而實際上不是。 我嘗試將console.log()和alert()放入其中,但是現在它顯然沒有響應。 還有其他方法可以執行此操作或對代碼進行任何更正嗎? 請注意,相同的代碼在另一台服務器上確實可以正常工作。 遷移后發生了這種情況。

非常感謝你的幫助!

非常感謝您提供的@DFreind@JonathanLonowski信息,在您的提示下,我終於弄清楚了這個問題,這使我花了將近3天的時間。 實際上,當我仔細查看PHP產生的html時,它說:1 {“ Response”:200,“ Data”:null,“ Message”:null}

JSON字符串生成之前的此“ 1”無法修改標頭錯誤! 經過大量的努力,在控制器的第一行打開<?php標簽之前,我只是看到一個普通的該死的'1'。 刪除這個“ 1”就像一個魅力,所有錯誤消失了,挽救了生命,現在在天上服用:-)

研究人員的建議:如果您遇到類似的錯誤,請安裝Firebug,並始終查看響應標頭,然后嘗試進行實驗。 大多數時候,PHP錯誤會干擾您的輸出。 在我的情況下,由於在php開始輸出之前,html產生了“已發送標頭”錯誤。請注意所有echo()或set_cookie()函數!

謝謝大家StackOverflowish怪胎:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM