Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET MVC, JavaScript: почему асинхронный запрос срабатывается со второго раза? / 6 сообщений из 6, страница 1 из 1
09.09.2016, 12:51
    #39306536
Solomka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC, JavaScript: почему асинхронный запрос срабатывается со второго раза?
Задам вопрос на примере регистрирования нового пользователя.
Допустим надо при регистрировании нового пользователя проверять чтобы не было новых пользователей с одинаковым логином.


Этот метод на сервере:
Код: c#
1.
2.
3.
4.
5.
6.
7.
 [HttpGet]        
public string CountUsersWithThisLogin(string TestUserName)        
{            
// тут вычисляется количество записей в БД с таким логином              
return new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(returnedApruvedNames);
       
}




А вот как воевать на клиенте никак не пойму?

Дошла до такого, что добавила отедльное поле для хранения количества переменной.
Код: html
1.
 <input style="visibility: visible" name="countUsersWithThisLogin" id="countUsersWithThisLogin" value="" />



В процессе проверки всех остальных полей на ввох проверяем поле ввода логина:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
CheckIsExistUserWithThisUserName();
var ccx =$("#countUsersWithThisLogin").val();
var checkingIsExistUserWithThisUserName = ccx == "0" ? true : false;
alert("Как прошла проверка: " + checkingIsExistUserWithThisUserName);
if (checkingIsExistUserWithThisUserName!=true ) 
{
alert("Пользователь с таким логином уже существует!" + $("#countUsersWithUsersName").val());
return false;
}

Эта функция  которая вызывает асинхронный запрос:

function CheckIsExistUserWithThisUserName() 
{
var sUN = $("#Login").val();
var url = '/User/CountUsersWithThisLogin/un=' + sUN;
//alert(url);

            
var func = function(data) 
{
var products = $.parseJSON(data);
$("#countUsersWithThisLogin").val(products);
alert("Количество пользователей с таким логином: " + products);
if (products === "0") 
{
return true;
} else {
//alert("Пользователь с таким логином уже существует");
return false;
}
};
$.get(url, func);
}



Без использования текстового поля в которое записывается количество пользщователей с таким же логином, функция всё время не правильно работает.
А если с использованием текстового поля, то работает с запаздованием на один раз.
То есть если в первый раз мы проверяем несуществующий логин. то проверка не проходится, а если второй раз мы протестим существующий или несуществующий логин, то по любому проверка проходится.

вот какая-то мелочь, но не понимаю, как её обойти?
...
Рейтинг: 0 / 0
09.09.2016, 15:37
    #39306683
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC, JavaScript: почему асинхронный запрос срабатывается со второго раза?
SolomkaЗадам вопрос на примере регистрирования нового пользователя.
Допустим надо при регистрировании нового пользователя проверять чтобы не было новых пользователей с одинаковым логином.
Под "при регистрировании" что конретно понимается? Момент непосредственного ввода логина? Или ввели логин, и перешли к другому полю? Или ввели все данные и отослали их на сервер?
...
Рейтинг: 0 / 0
09.09.2016, 15:45
    #39306694
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC, JavaScript: почему асинхронный запрос срабатывается со второго раза?
Судя по данному коду:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
1. CheckIsExistUserWithThisUserName();

2. var ccx =$("#countUsersWithThisLogin").val();
3. var checkingIsExistUserWithThisUserName = ccx == "0" ? true : false;

4. alert("Как прошла проверка: " + checkingIsExistUserWithThisUserName);

5. if (checkingIsExistUserWithThisUserName!=true ) 
6. {
7.   alert("Пользователь с таким логином уже существует!" + $("#countUsersWithUsersName").val());
8.   return false;
9. }


Вы не понимаете что такое асинхронный запрос.

В строке 1 Вы вызываете функцию CheckIsExistUserWithThisUserName , внутри которой отправляете запрос серверу для вычисления количества записей в БД с указанным логином.
Пока данный запрос идёт на сервер и там обрабатывается, то выполняется код в строках 2, 3, 4.

При втором вызове данного кода в поле #countUsersWithThisLogin содержится результат первого запроса и у Вас складывается впечатление, что происходит какое-то запаздываение.
...
Рейтинг: 0 / 0
09.09.2016, 16:40
    #39306755
Solomka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC, JavaScript: почему асинхронный запрос срабатывается со второго раза?
skyANAСудя по данному коду:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
1. CheckIsExistUserWithThisUserName();

2. var ccx =$("#countUsersWithThisLogin").val();
3. var checkingIsExistUserWithThisUserName = ccx == "0" ? true : false;

4. alert("Как прошла проверка: " + checkingIsExistUserWithThisUserName);

5. if (checkingIsExistUserWithThisUserName!=true ) 
6. {
7.   alert("Пользователь с таким логином уже существует!" + $("#countUsersWithUsersName").val());
8.   return false;
9. }


Вы не понимаете что такое асинхронный запрос.

В строке 1 Вы вызываете функцию CheckIsExistUserWithThisUserName , внутри которой отправляете запрос серверу для вычисления количества записей в БД с указанным логином.
Пока данный запрос идёт на сервер и там обрабатывается, то выполняется код в строках 2, 3, 4.

При втором вызове данного кода в поле #countUsersWithThisLogin содержится результат первого запроса и у Вас складывается впечатление, что происходит какое-то запаздываение.

Да Вы правы...
Как теперь можно выкрутиться?
Так чтобы можно было именно делать запрос к серверу на счёт количества записей с таким логином?
...
Рейтинг: 0 / 0
09.09.2016, 18:12
    #39306815
Solomka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC, JavaScript: почему асинхронный запрос срабатывается со второго раза?
skyANA,

Спасибо, что дали наводку, а то меня переклинило.
сделала через new XMLHttpRequest()
...
Рейтинг: 0 / 0
09.09.2016, 22:44
    #39306916
Vladimir A
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC, JavaScript: почему асинхронный запрос срабатывается со второго раза?
Solomka,
just my experience

public class PasswordRegisterViewModel
{
[Remote("IsUsernameUnique", "Validation", "Account")]
public string Username { get; set; }
...
}

in controller

public JsonResult IsUsernameUnique([Bind(Prefix = "PasswordRegister.Username")] string username)
{
if (_membershipService.IsUsernamePersisted(username))
{
var msg = string.Format(Messages.USER_WITH_SMTH_SMTH_ALREADY_EXIST, Messages.USERNAME.ToLower(),
username);
return Json(msg, JsonRequestBehavior.AllowGet);
}
return Json(true, JsonRequestBehavior.AllowGet);
}
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET MVC, JavaScript: почему асинхронный запрос срабатывается со второго раза? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]