@kostarus61

Отправка формы без перезагрузки страницы jQuery?

Здравствуйте, я уже писал похожий вопрос, но такая проблема, вообщем есть скрипт который отлично работает на Денвере, закидываю его на VDS, не работает, браузер показывает ошибку Uncaught TypeError: Cannot read property 'status' of null и ругается на следующий кусок кода:

if (data.status === 'success') {
						setTimeout("jQuery('#loadA').load('#div #loadB');",1000);
                    }


Вот полностью код:

<script>
//Обработчик для посева
$(document).ready(function(){
	var n;
	$('#form1').live('submit', function(){
        var current = $(this).parent().parent();
        var data = $(this).serialize();
        data += '&ajax-request=true';

        $.ajax({
            type: 'POST',
            url: '/ajax/seat.php',
            dataType: 'json',
            data: data,
            success: (function() {
                return function(data) {
					if (data.status === 'success') {
						setTimeout("jQuery('#loadA').load('#div #loadB');",1000); // Обновляет данные в блоке
                    }
					
					if(n) {
						n.setText('<b>' + data.message + '</b>'); 
						n.setType(data.status); 
					} else {
						n =	noty({
							text: '<b>' + data.message + '</b>',
							type: data.status,
							dismissQueue: false,
							killer: true,
							layout: 'topCenter',
							theme: 'defaultTheme',
							timeout: 5000,
							callback:  {
								afterClose: function() {n=null;}
							}
						});
					}
				};
            })()
        });
        return false;
    });
});
</script>
  • Вопрос задан
  • 3516 просмотров
Решения вопроса 1
@eandr_67
web-программист (*AMP, Go, JavaScript, вёрстка).
В данном случае $.ajax(...) ожидает, что сервер при запросе на адрес /ajax/seat.php вернёт json-объект, содержащий поле success. Очевидно, что сервер возвращает совсем не то, что требуется. Программа не находит в полученных данных упомянутое выше поле и вылетает с ошибкой.

Так что разбираться надо не с отправкой формы, а с тем, что творится на сервере при её получении. Например, серверный скрипт выдаёт какие-то предупреждения, или сообщения об ошибках - в этом случае браузер не воспринимает полученные данные как json и обработчику ответа сервера в параметре data передаётся null (как раз твой случай).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@maxyc_webber
Web-программист
$.post({'/ajax/seat.php', data, function(data) {
					if (data.status == 'success') {
						setTimeout("jQuery('#loadA').load('#div #loadB');",1000); // Обновляет данные в блоке
                    }
					
					if(n) {
						n.setText('<b>' + data.message + '</b>'); 
						n.setType(data.status); 
					} else {
						n =	noty({
							text: '<b>' + data.message + '</b>',
							type: data.status,
							dismissQueue: false,
							killer: true,
							layout: 'topCenter',
							theme: 'defaultTheme',
							timeout: 5000,
							callback:  {
								afterClose: function() {n=null;}
							}
						});
					}
				};
            })()
        });
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы