Показать сообщение отдельно
  #1 (permalink)  
Старый 21.11.2011, 12:03
Новичок на форуме
Отправить личное сообщение для evgen.minsk Посмотреть профиль Найти все сообщения от evgen.minsk
 
Регистрация: 21.11.2011
Сообщений: 5

Во время ajax запроса зависает цикл в функции обработчика
Скрипт передает post запрос для отправки e-mail заказа с данными о натяжном потолке и обрабатывает результат.
Вот примерно так (обрезал мало существенные детали) выглядит код:

$("#sale").click(function() {
	var Form = {
	 name: 'contactForm',
   	 cssClass: {'warning' : 'warning','error' : 'error', 'success' : 'success'},
  	 id: {'error' : 'error', 'success': 'success'},
  	 errorPrefix: 'Error',
  	 action: function(){return $('#' + this.name).attr('action')},
	 data: function(){return $('#' + this.name).serialize();},
         hideBox: function(el){$(el).slideUp('slow');},
	 showBox: function(el){$(el).slideDown('slow');}
	}
    	// Boxes to hide
    	var cssBoxes = '.' + Form.cssClass['warning'] + ',.' + Form.cssClass['error'] + ',.' + Form.cssClass['success'];

    	// hide all boxes if some exists
       $('#ajax_loader').ajaxStart(function(){$('#send').hide(); $(this).show() })
       $('#ajax_loader').ajaxComplete(function(){$('#send').show(); $(this).hide() })
       $('#' + Form.name).submit(function(){ 
	Form.hideBox(cssBoxes);		   
   	 	// Ajax request
	    $.post(Form.action(), Form.data(), function(p_data){
		var post_res = JSON.parse(p_data);
		if(post_res === true){
	        	Form.showBox('#' + Form.id['success']);
		    $('#contact_form form input[type="text"]').attr('value', '');
        	}else if(post_res === false){
			Form.showBox('#' + Form.id['error']);
		}else{
			Form.showBox('#'+Form.errorPrefix);
			for (var p_val in post_res){Form.showBox('#' + post_res[p_val] + Form.errorPrefix);}
		       }
	   });
    	   return false;
	});
});

В последнем цикле происходит зацикливание и не возникает .ajaxComplete
Если убрать этот цикл - все сработает, естественно, за исключением подсветки нужных div.

Если этот цикл в IE8 заканчивается, и дивы высвечивает, но не выполняется .ajaxComplete.
То в Chrome в этом цикле вообще происходит переполнение: после всех фактических данных массива, возникают какие-то не понятные отрезки кода, видные при отладке с помощью
alert(post_res[p_val]);
прямо в цикле. А потом вообще перегрузка ЦП до 100%!

Подскажите, в чем может быть дело? Где копать?
Могу опять для пробы вернуть отладочные сообщения.
Если это принципиально, все работает в UTF-8 и данные (в т.ч. содержание name и id свойств в полях ввода формы) содержат кириллицу.

Форма откроется при выборе в калькуляторе расчета стоимости натяжного потолка нескольких последовательных шагов и нажатии на батон "Заказать".

Последний раз редактировалось evgen.minsk, 21.11.2011 в 23:41. Причина: немного уточнил детали
Ответить с цитированием