Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   AJAX срабатывает, но нет ошибок, даже если намеренно их сделать (https://javascript.ru/forum/jquery/65026-ajax-srabatyvaet-no-net-oshibok-dazhe-esli-namerenno-ikh-sdelat.html)

Sokoljr 20.09.2016 19:52

AJAX срабатывает, но нет ошибок, даже если намеренно их сделать
 
Вот часть кода, здесь происходит регистрация на сервере, все работает, пользователь регистрируется, success срабатывает - выводится алерт и закрывается модалка, НО - регистрироваться можно хоть 100 раз под одним и тем же ником, error - не срабатывает ( если ник такой уже есть, то высвечивалась надпись), на чистом JS работает, на jquery не получается




function signUp() {
        $('#regBtn').on('click', function(event) {	
                event.preventDefault();
	        var newName = $("#newName").val();
	        var newPass = $("#newPass").val();
	        var registration = {
	         	"username": newName,
		         "password": newPass
		};
	        var jsonStr;
		jsonStr = JSON.stringify(registration);
                $.ajax({
	             type: "POST",
	            contentType: "application/json",
	            url: urlMain + "api/register/",
	            data: jsonStr,            
	            dataType: "json",
	            success: function (data){
	                alert("Successful registration! Now Log In"); 
	                $("#modalReg").modal("hide");                          
	            },
	            error: function (data) {                 
	                var registrationValid = $(".validRegistration").addClass("validRegistration");
	            }              
	        });
	    });
	}
	signUp();

dd_smol 20.09.2016 20:18

В данном контексте error является отлов ошибок по связи с сервером ... они не как не влияют на ошибки регистрации ... success должны прийти сервера данные о том что такой пользователь уже существует и уже их обработать как ошибку.

Sokoljr 20.09.2016 20:30

Цитата:

Сообщение от Rise (Сообщение 429278)
покажи

function signUp() {
    document.querySelector('#regBtn').addEventListener('click', function () {
        var newName = document.getElementById("newName").value;
        var newPass = document.getElementById("newPass").value;
        var registration = 'username=' + newName + '&password=' + newPass;
        var xhrRegistration = new XMLHttpRequest();
        xhrRegistration.open('POST', 'http://smktesting.herokuapp.com/api/register/', true);
        xhrRegistration.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
        xhrRegistration.setRequestHeader('Accept', "application/json");
        xhrRegistration.onreadystatechange = function () {
            if (this.readyState === 4) {
                xhrRegistration.onload = function () {
                    gsonProductComments3 = JSON.parse(xhrRegistration.responseText);
                    if (gsonProductComments3.success === true) {
                        alert("Successful registration! Now Log In");
                        $("#modalReg").modal("hide");
                    }
                    else {
                        var registrationValid = document.querySelector(".validRegistration");
                        registrationValid.className = "validRegistration";
                    }
                };
            }
        };
        xhrRegistration.send(registration);
    });
}
signUp();

Sokoljr 20.09.2016 20:32

dd_smol,
так а как тогда предотвратить одинаковое создание логина?

dd_smol 20.09.2016 20:37

Что то наподобие этого должно быть.
$.post(urlMain + 'api/register/', jsonStr, function ( data ) {
	if ( data.success === true ) {
		alert("Successful registration! Now Log In"); 
		$("#modalReg").modal("hide");   

	} else {
		var registrationValid = $(".validRegistration").addClass("validRegistration");
	}
}, 'json');

dd_smol 20.09.2016 20:53

Цитата:

Сообщение от Rise (Сообщение 429283)
dd_smol, невалидный json тоже приведет к error

Про такие тонкости в документациях не описано ... проверять опытным путем лень. Так что поверю на слова ... но если не изменяет память отсылаемы данные не как не влияют на взаимодействие между сервером и клиентом. :)

Sokoljr 20.09.2016 20:55

Цитата:

Сообщение от dd_smol (Сообщение 429284)
Что то наподобие этого должно быть.
$.post(urlMain + 'api/register/', jsonStr, function ( data ) {
	if ( data.success === true ) {
		alert("Successful registration! Now Log In"); 
		$("#modalReg").modal("hide");   

	} else {
		var registrationValid = $(".validRegistration").addClass("validRegistration");
	}
}, 'json');

Так не срабатывает

dd_smol 20.09.2016 21:15

Цитата:

Сообщение от Sokoljr (Сообщение 429290)
Так не срабатывает

Я бы еще HTML посмотрел и на данные приходящие с сервера в data.

Вы так делаете?
jQuery(function ( $ ) {
	$('#regBtn').click(function ( e ) {
		$.post('http://smktesting.herokuapp.com/api/register/', $(this).closest('form').serialize(),
			function ( data ) {
				if ( typeof data === 'object' && data.success ) {
					$("#modalReg").modal("hide");
				} else {
					// Смысл сего действия для меня загадка т.к. тупа находит класс и перезаписует его же.
					$('.validRegistration').addClass('validRegistration');
				}
			}, 'json');
	});
});

Sokoljr 20.09.2016 21:19

dd_smol,


Так вроде бы работает, может ли быть такой корректный код?



function signUp() {
	    $('#regBtn').on('click', function(event) {
	    	event.preventDefault();
	        var newName = $("#newName").val();
	        var newPass = $("#newPass").val();
	        var registration = {
	        	"username": newName,
		        "password": newPass
		    };
	        var jsonStr;
		    jsonStr = JSON.stringify(registration);
			    $.ajax({
	            type: "POST",
	            contentType: "application/json",
	            url: urlMain + "api/register/",
	            data: jsonStr,            
	            dataType: "json",
	            success: function (data) {
	            	if (data.success === true) {
		                alert("Successful registration! Now Log In"); 
		                $("#modalReg").modal("hide");
	                } else {
	                	$('.validRegistration').addClass('validRegistration');
	                }                          
	            }              
	        });
	    });
	}
	signUp();

dd_smol 20.09.2016 21:22

Цитата:

Сообщение от Sokoljr (Сообщение 429295)
dd_smol,
Так вроде бы работает, может ли быть такой корректный код?

Корректный код ... понятие относительное :)


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