Jquery回调错误:未捕获TypeError:无法读取未定义的属性“length”

时间:2014-12-09 08:10:46

标签: php jquery ajax

我有一个表单来调用ajax进行后端处理,所有输入都将存储在表中并返回'success'以通知用户提交成功。但是我在回调期间面临一个问题,输入数据可以保存到表中,但回调停止,下面有错误,我不知道出了什么问题,同样的脚本被应用到另一个表单(具有不同的表单字段)工作得很好,请帮助解决。

控制台日志(Chrome):

Uncaught TypeError: Cannot read property 'length' of undefined
m.extend.each
$.ajax.success
j
k.fireWith
x
b

火狐

TypeError: a is undefined

...rCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e...

脚本:

$(document).ready(function() {

        $("#status").hide();

        $('#btn_submit').click(function(){
            var params = $('#project_form').serialize();
            var btn = $(this);
            btn.button('loading')

            $.ajax({
                url: baseurl + '/process_form.php',
                type: 'POST',
                data: params,
                dataType: 'json',
                success: function(response){
                    if(response.success == 'success'){

                        $('#status').html('<b>Thank you</b>').show();

                        $('html,body').animate({
                            scrollTop: $('#top').offset().top
                        },500);

                    }else{
                        $('[id$="_error"]').html('');
                        $.each(response.error, function(key, value){
                            if(value){
                                $('#' + key + '_error').html(value);
                            }
                        });
                    }
                },
                error: function(){
                    console.log(arguments);
                }
            }).always(function(){
                btn.button('reset')
            });

        });

});

2 个答案:

答案 0 :(得分:0)

第一:当你想使用提交时使用ajax时请不要使用提交点击..使用表单提交更好

$('#project_form').on('submit',function(){
            var params = $(this).serialize();

第二:如果成功你在process_form.php中回应('成功')你应该使用

if(response == 'success')

并使用response代替response.error

  • 希望它会有所帮助

答案 1 :(得分:0)

您的问题是您使用success回调方法的方式。手册说:

  

请求成功时要调用的函数。该函数传递三个参数:从服务器返回的数据,根据dataType参数或dataFilter回调函数格式化(如果指定);描述状态的字符串;和jqXHR(在jQuery 1.4.x,XMLHttpRequest中)对象。

因此除非您自己确保从正在执行ajax的网址返回,否则不会传递.success.error。 (如果您这样做,那么请不要阅读我的其余部分,并使用Element Inspector查看.success.error是否实际位于返回的数据中。)

所以现在你的if (response.success == "success")是假的,因为它实际上是未定义的。并且response.error也未定义,因此$.each(response.error, ...)会解决您的问题,因为您无法.each未定义。

假设您成功是正常的,因为您在成功处理程序中。