【问题标题】:Jquery callback error: Uncaught TypeError: Cannot read property 'length' of undefinedJquery 回调错误:未捕获的 TypeError:无法读取未定义的属性“长度”
【发布时间】:2014-12-09 08:10:46
【问题描述】:

我有一个表单来调用 ajax 进行后端处理,所有输入都将存储在表中并返回“成功”以通知用户提交成功。但是我在回调过程中遇到了一个问题,输入数据可以保存到表中,但是回调因下面的错误而停止,我不知道出了什么问题,相同的脚本应用于另一个表单(具有不同的表单字段)运行良好,请帮忙解决。

控制台日志(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')
            });

        });

});

【问题讨论】:

标签: php jquery ajax


【解决方案1】:

首先:当你想使用 ajax 和提交时,不要使用提交点击 .. 在提交时使用表单更好

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

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

if(response == 'success')

并使用response 而不是response.error

  • 希望对您有所帮助

【讨论】:

    【解决方案2】:

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

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

    所以它不会得到 .success.error 传递,除非您自己确保它是从您正在执行 ajax 的 url 返回的。 (如果您正在这样做,请不要阅读我的其余答案,并使用 Element Inspector 查看 .success.error 是否实际上在返回的数据中。)

    所以现在你的if (response.success == "success") 是假的,因为它实际上是未定义的。而且response.error 也是未定义的,所以$.each(response.error, ...) 给您带来了问题,因为您不能.each 未定义。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      • 2016-11-17
      • 1970-01-01
      • 2013-11-24
      相关资源
      最近更新 更多