Проверка jjGrid Ajax внутри beforeSubmit - PullRequest
0 голосов
/ 21 марта 2012

У меня есть форма jqGrid для создания новых пользователей, и я хочу убедиться, что (среди других полей, представленных формой) имя пользователя еще не существует в базе данных.
Итак, я создал действие beforeSubmit,это выполняется, когда кнопка отправки нажата, но перед отправкой формы.
Я думаю, что функция работает, потому что код ниже всегда возвращает «Пользователь существует»;

beforeSubmit: function (postdata, formid) {return [false, "Пользователь существует"];}

Но когда я пытаюсь использовать $ .get, чтобы сделать ajax-запрос к серверу, чтобы проверить, существует ли имя пользователя, я всегда получаю ошибку k is undefined.Этот код выдает ошибку

beforeSubmit: function (postdata, formid) {

$. Get ("project-management? R = Users / usernameExists & tmpl = json & username ="+ postdata.username, function (data) {
return [false, "Exists"];
});}

Я знаю, что это не настоящая проверка, но она не должна давать тот же результат, что и первый сценарий?

Большое спасибо

1 Ответ

0 голосов
/ 21 марта 2012

Прежде всего я объясню, почему ваш код не работает так, как вы ожидаете.

Метод $.get работает асинхронно . Так

  • ваша функция beforeSubmit первый запуск $.get
  • затем возвращает значение undefined, поскольку тело функции beforeSubmit будет завершено.
  • Затем, после того как асинхронный запрос $.get получит ответ от сервера, будет вызван обратный вызов function(data) { (это обратный вызов success).
  • Ваш success обратный вызов возвращает значение return[false,"Exists"]; из обратного вызова . $.get не анализирует возвращаемое значение из обратного вызова success, поэтому массив [false,"Exists"] будет отброшен $.get.

Вы можете использовать $.ajax с параметром async: false вместо $.get в качестве обходного пути, но лучше вообще не реализовывать beforeSubmit. Если ваш серверный код обнаруживает, что пользовательские изменения не могут быть сохранены или поле ввода содержит некоторые ошибки проверки, сервер должен просто вернуть ответ с некоторым ошибочным кодом состояния HTTP . Код состояния может быть 400 или выше в случае ошибок проверки - Ошибка клиента или 500 или выше в случае некоторых других ошибок при обработке запроса на сервере - Ошибка сервера, Тело ответа сервера может быть HTML-фрагментом сообщения, которое jqGrid будет отображать пользователю.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...