jQuery的错误:未捕获的类型错误:无法读取未定义的属性“长度” [英] Jquery error: Uncaught TypeError: Cannot read property 'length' of undefined

查看:3069
本文介绍了jQuery的错误:未捕获的类型错误:无法读取未定义的属性“长度”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个表格,以AJAX调用后端处理,所有的输入将保存在桌面上并返回成功,以通知用户提交的成功。但是,我的回调过程中面临的一个问题,输入数据可以保存到表中,但回调暂停下面的错误,我不知道是什么出了问题,同样的脚本应用到另一种形式(具有不同的表单字段)工作正常。

控制台日志 - 浏览器:

 未捕获的类型错误:无法读取的未定义的属性长度
m.extend.each
$ .ajax.success
Ĵ
k.fireWith
x
b
 

火狐

 类型错误:一个是未定义

... rCase()},每个:函数(A,B,C){VAR D,E = 0,F =则为a.length,G = R(A);如果(C){如果(G){为(; F> e,E ...
 

Firefox的错误指向 F = A

脚本:

  $(文件)。就绪(函数(){

        $(#状态)隐藏()。

        $('#btn_submit)。点击(函数(){
            VAR PARAMS = $('#project_form')序列化()。
            VAR BTN = $(本);
            btn.button('装')

            $阿贾克斯({
                网址:baseURL时+/process_form.php,
                键入:POST,
                数据:参数,可以
                数据类型:JSON,
                成功:函数(响应){
                    如果(response.success =='成功'){

                        $('#状态)HTML('< B>谢谢< / B>')显示()。

                        $('HTML,身体)动画({
                            scrollTop的:$('#顶')偏移()顶部
                        },500);

                    }其他{
                        $('[ID $ =_错误])HTML('')。
                        $每个(response.error,功能(键,值){
                            如果(值){
                                $('#'+键+_error)HTML(值);
                            }
                        });
                    }
                },
                错误:函数(){
                    执行console.log(参数);
                }
            })永远(函数(){
                btn.button(复位)
            });

        });

});
 

process_form.php

 标题(内容类型:应用程序/ JSON);

$ serialized_data =序列化($ _ POST);

$全称= $ mysqli-> real_escape_string(ucwords(用strtolower($ _ POST ['全名'])));
$年龄= $ mysqli-> real_escape_string(ucwords(用strtolower($ _ POST ['年龄'])));
$电子邮件= $ mysqli-> real_escape_string(用strtolower(修剪($ _ POST ['semail'])));
$手机= $ mysqli-> real_escape_string(修剪($ _ POST ['电话']));
$ PROJ_ID = preg_replace('/ [^ 0-9] /','',$ mysqli-> real_escape_string($ _ POST ['PROJECT_ID']));
$ PROJ_NAME = $ mysqli-> real_escape_string(ucwords(用strtolower($ _ POST ['PROJECT_NAME'])));
$ AGENT_ID = preg_replace('/ [^ 0-9] /','',$ mysqli-> real_escape_string($ _ POST ['AGENT_ID']));
$ agent_email = $ mysqli-> real_escape_string(用strtolower(修剪($ _ POST ['agent_email'])));
$ agent_name = $ mysqli-> real_escape_string(ucwords(用strtolower($ _ POST ['agent_name'])));
$验证码= $ _ POST ['captcha_ code'];

$ FUNC =新功能();
$消息=阵列();

//验证
如果(空($全称)||的strlen($全称)2){
    $消息['错误'] ['全名'] ='你的名字是必需;
}
如果(空($岁)){
    $消息['错误'] ['年龄'] ='您的年龄,需要;
}
如果($功能>!check_email_address($电子邮件)){
    $消息['错误'] ['semail'] ='电子邮件地址无效;
}
如果(空($电话)||的strlen($电话)小于10){
    $信息[错误] [电话] ='电话NUM是必需的;
}

$ securimage =新Securimage();
$安全code = $ securimage->获得code();
如果(用strtolower($安全code)!=用strtolower($验证码)){
    $消息['错误'] ['验证码'] ='不正确的安全code';
}


如果(!使用isset($消息['错误'])){

    //插入表格
    $创造= $ mysqli->查询(INSERT INTO`xxx` ...)或死亡($ mysqli->错误);

    如果($创建){
        //发电子邮件
        $到= XXX;
        $主题='YYY';
        $味精='< HTML>
                    <身体GT;
                        等等...
                    < /身体GT;
                < / HTML>';
        从$ = ZZZ;
        $标题='的MIME版本:1.0。 \ r \ N的;
        $标题='内容类型:text / html的;字符集= UTF-8。 \ r \ N的;
        $标题=发件人:。$全称 <'。$距离。'> 。 \ r \ N的;

        如果(电子邮件($到,$主题,$味精,$头)){
            $消息['成功'] ='成功';
        }
    }

}

回声json_en code($消息);
 

解决方案

我想这是因为邮件函数失败,并返回这里:

 如果(电子邮件($到,$主题,$味精,$头)){
   $消息['成功'] ='成功';
}
 

让你的回应既没有成功属性,也不错误属性,这会导致这里的错误:

  $。每个(response.error,功能(键,值){
   如果(值){
      $('#'+键+_error)HTML(值);
   }
});
 

您可以尝试这样的:

 如果(电子邮件($到,$主题,$味精,$头)){
    $消息['成功'] ='成功';
}其他{
    $消息['错误'] ['邮件'] ='邮件的错误!;
}
 

或者设置 $消息['成功'] ='成功'; 后直接将数据保存到表姑邮件成功

I have a form to call ajax for back-end processing, all input will stored in table and will return 'success' to to notify user the submission is success. But I facing an issue during callback, input data can saved into table but the callback is halted with error below, I have no idea what is goes wrong, the same script was applied to another form (with different form field) are working fine.

console log - Chrome:

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

Firefox

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...

firefox error is pointed to f=a.

Script:

$(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')
            });

        });

});

process_form.php

header("Content-Type: application/json");

$serialized_data = serialize($_POST);

$fullname = $mysqli->real_escape_string(ucwords(strtolower($_POST['fullname'])));
$age = $mysqli->real_escape_string(ucwords(strtolower($_POST['age'])));
$email = $mysqli->real_escape_string(strtolower(trim($_POST['semail'])));
$phone = $mysqli->real_escape_string(trim($_POST['phone']));
$proj_id = preg_replace('/[^0-9]/', '', $mysqli->real_escape_string($_POST['project_id']));
$proj_name = $mysqli->real_escape_string(ucwords(strtolower($_POST['project_name'])));
$agent_id = preg_replace('/[^0-9]/', '', $mysqli->real_escape_string($_POST['agent_id']));
$agent_email = $mysqli->real_escape_string(strtolower(trim($_POST['agent_email'])));
$agent_name = $mysqli->real_escape_string(ucwords(strtolower($_POST['agent_name'])));
$captcha = $_POST['captcha_code'];

$func = new Functions();
$message = array();

// validate
if(empty($fullname) || strlen($fullname) < 2){
    $message['error']['fullname'] = 'Your name is required';
}
if(empty($age)){
    $message['error']['age'] = 'Your age is required';
}
if(!$func->check_email_address($email)){
    $message['error']['semail']  = 'Invalid email address';
}
if(empty($phone) || strlen($phone) < 10){
    $message['error']['phone'] = 'Phone num is required';
}

$securimage = new Securimage();
$securecode = $securimage->getCode();
if(strtolower($securecode) != strtolower($captcha)) {
    $message['error']['captcha'] = 'Incorrect security code';
}


if(!isset($message['error'])){

    // insert table
    $create = $mysqli->query("INSERT INTO `xxx` ...") or die($mysqli->error);

    if($create){
        //send email
        $to = xxx;
        $subject = 'yyy';
        $msg = '<html>
                    <body>
                        blah...
                    </body>
                </html>';
        $from = zzz;
        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
        $headers .= 'From: '.$fullname.' <'.$from.'>' . "\r\n";

        if(mail($to, $subject, $msg, $headers)){
            $message['success'] = 'success';
        }
    }

}

echo json_encode($message);

解决方案

I think it is because the mail function failed, and returned false here:

if(mail($to, $subject, $msg, $headers)){
   $message['success'] = 'success';
}

so your response neither has success property, nor error property, and this causes an error here:

$.each(response.error, function(key, value){
   if(value){
      $('#' + key + '_error').html(value);
   }
});

You can try something like:

if(mail($to, $subject, $msg, $headers)){
    $message['success'] = 'success';
}else{
    $message['error']['mail'] = 'Mail error!';
}

or set $message['success'] = 'success'; directly after saving data into table regardless mail success.

这篇关于jQuery的错误:未捕获的类型错误:无法读取未定义的属性“长度”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆