Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Cannot read property 'length' of undefined (https://javascript.ru/forum/misc/44006-cannot-read-property-%27length%27-undefined.html)

SpiritAbsolute 31.12.2013 10:58

Cannot read property 'length' of undefined
 
Uncaught TypeError: Cannot read property 'length' of undefined
jquery-1.9.1.js
На вот эту строчку библиотеки ругается. length = obj.length,
// args is for internal usage only
       each: function( obj, callback, args ) {
	var value,
		i = 0,
		length = obj.length,
		isArray = isArraylike( obj );



$('#reports').validate({
        errorLabelContainer: 'div.errors',
        errorElement: 'div',
        rules: {
            name: {
                required: true
            },
            text: {
                required: true,
				maxlength: 8000
            },
            keystring: {
                required: true
            }
        },
        messages: {
            name: {
                required: "Вы не ввели имя"
            },
            text: {
                required: "Вы нe ввели вопрос",
				maxlength: "Максимальная длина сообщения 8000 символов"
            },
            keystring: {
                required: "Вы не ввели код, указанный на картинке"
            }
        },
        submitHandler: function(form) {
            var opt = {
                dataType: 'json',
                url: 'core/add_comment_goods.php',
                success: function(data) {
                    if (data.success) {
                        $('body').myAlert({
                            title: 'Отзыв для товара',
                            dialogWidth: 330,
                            dialogHeight: 170,
                            winWidth: 290,
                            timeOut: 2500,
                            text: 'Спасибо за отзыв.'
                        });
                        $('#reports').clearForm();
                        $("#captcha").trigger('click');
                    } else {
                        $('.errors').html('');
                        $.each(data.errors, function(k, i) {
                            $('div.errors').append('<span class="error">' + i + '</span></br>');
                        })
                        $('div.errors').show();
                    }
                }
            };
            $(form).ajaxSubmit(opt);
        }
    });


Вот такой вот код обрабатывающий форму.
Вот такой вот код шаблона.
<div class="es_goods_bottom_reviews" id="tab2">
			{if $aData.comments|@count neq 0}
				{foreach from=$aData.comments item=n key=k name=comments}
					<h4>{$n.name_user}&nbsp;{$n.family_user}</h4>
					<div class="es_goods_bottom_diskr">
						{$n.text_comment}
					</div>
				{/foreach}
				<div class="es_border2"></div>
			{/if}
			<h3>Написать отзыв</h3>
			<table>
			<form method="post" action="#" id="reports">
				<tr>
					<td><span>*</span>Имя</td>
					<td><input type="text" id="name"></td>
				</tr>
				<tr>
					<td>E-mail</td>
					<td><input type="text" id="email"></td>
				</tr>
				<tr>
					<td><span>*</span>Текст</td>
					<td><textarea id="text"></textarea></td>
				</tr>
			</form>
			</table>
			<div class="es_border2"></div>
			<div class="es_row">
				<div class="input">
					<div id="mycaptcha">
						<img title="Нажмите сюда для генерации нового кода" alt="Нажмите сюда для генерации нового кода" src="./kcaptcha/index.php?PHPSESSID=grcehjg6kdukonnu3daet4gmt1" onclick="new_captcha('captcha', 'PHPSESSID', 'grcehjg6kdukonnu3daet4gmt1');" id="captcha" >
						<br>
						<div class="right">
							<label for="keystring"><span class="required">*</span>Введите код</label>
							<input type="text" class="input-text" id="keystring" name="keystring" value="" />
						</div>
						<div class="left">
							Для обновления картинки<br/>
							нажмите на нее
						</div>						
					</div>						
				</div>
				<div class="clear"></div>
			</div>
			<div class="es_border2"></div>
			<div class="es_goods_bottom_reviews_bottom">
				<div class="es_row">
					<span class="required">*</span> — обязательные для заполнения поля
				</div>
				<div class="es_clear"></div>
				<a href="#" id="send" class="es_a_button es_a_button_active es_a_button_active_next" style="float:left">Отправить</a>
			</div>
		</div>

danik.js 31.12.2013 11:37

А что отвечает core/add_comment_goods.php на запрос?
Ошибка то из-за того что data.errors не определено. Смотри в отладчике, вкладка Сеть либо сделай console.log(data) или поставь точку останова.

SpiritAbsolute 31.12.2013 11:47

core/add_comment_goods.php отвечает:
error: "Произошла ошибка. Попробуйте перезагрузить страницу"
success: false
то есть получается выборки в классе не происходит id_goods нету...
$row = $this->dbh->query("SELECT COUNT(*) FROM shop_goods WHERE id_goods = '$id_goods'")->fetchColumn();

но причем тут javascript и эта ошибка не могу понять...

SpiritAbsolute 31.12.2013 12:00

id_goods равен нулю, он его не получает... пробую исправить.

SpiritAbsolute 31.12.2013 12:39

Проблема решена добавлением в шаблон этого айдишника, и далее еще несколько правок и добавлений методов и все работает! : ) Но ошибка кстати осталась javascript.
<input type="hidden" name="id_goods" value="{$aData.id_goods}">

Но ошибка кстати осталась javascript. Пока что она не критична, но все равно хочется узнать причину...

danik.js 31.12.2013 13:32

Цитата:

Сообщение от SpiritAbsolute
все равно хочется узнать причину

Я ведь уже объяснил - data.errors не существует. То есть ты вместо массива передаешь undefined - вот и ошибка.
У тебя в коде предполагается что если data.success = false, то обязательно должны быть data.errors = [__массив__]


Часовой пояс GMT +3, время: 19:22.