2014-12-11 5 views
0

Я работаю с AJAX какое-то время, я могу получить форму для отправки через ajax, я могу получить Div для перезагрузки через ajax, добавить, отредактировать, удалить через ajax. На что я сейчас нацелен, лучше понять, как отображать сообщения об ошибках.Лучшее понимание AJAX

То, что я думаю, что это сообщение об ошибке Предположим, что форма запрашивает имя, которое будет представлено, когда пользователь не вводит свое имя и нажимает кнопку отправки, то сообщение об ошибке должно быть показано спрашивать пользователя вВведите требуется информация.

В настоящее время я управляю этим внутри части AJAX success, это правильный способ сделать это? Если да, то что такое AJAX error: function? Должно ли сообщение об ошибке, в котором пользователь не вводил необходимую информацию, должен отображаться через error: function?

Это то, что вызывает мои звонки AJAX, и я хочу его улучшить.

$.ajax({ 
    url: 'demo.php', //your server side script 
    data: $("#form").serialize(), 
    type: 'POST', 
    beforeSend: function() { 
     $('#dvloader').show(); 
    }, 
    success: function (data) { 
    $('#dvloader').hide(); 
    $("#message").html(data); 
    } 
}); 

Я также хотел бы знать, должен скрываться загрузочная GIF быть ИСИДЕ в success, а также, хотя это работает, но я хочу знать, если это правильный способ сделать это.

Я по-настоящему признателен за любые отзывы об этом.

+2

Почему бы не прочитать документы? Они хорошо объясняют, что такое 'error'> Функция, вызываемая, если запрос терпит неудачу. Функция получает три аргумента: объект jqXHR (в jQuery 1.4.x, XMLHttpRequest), строка, описывающая тип возникшей ошибки и необязательный объект исключения, если это произошло. Возможные значения для второго аргумента (кроме нуля) - это «тайм-аут», «ошибка», «прервать» и «parsererror». При возникновении ошибки HTTP errorThrown получает текстовую часть статуса HTTP, например «Not Found» или «Internal Server Error». – BenM

+0

, когда скрипт вы вызываете время, он должен перейти в блок 'error', вот пример. у вас есть ваша пользовательская ошибка (неправильное имя пользователя/пароль, обязательные поля и т. д.), на самом деле вы можете найти это в руководстве. http://api.jquery.com/jquery.ajax/ – Ghost

+0

Спасибо @Ghost, поэтому пользовательская ошибка должна обрабатываться в 'success', в то время как тайм-аут и другие связанные ошибки должны обрабатываться' error'. Как мы знаем этот скрипт истекло время, и настало время вызвать часть 'error' из' AJAX' – Baig

ответ

1

beforeSend: - прежде чем запрос Ajax отправляется
success: - когда запрос успешно и вернулся что-то
error: - когда Ajax запрос не удался (технически)

Для тайма-аута ошибки вы используете error: обратный вызов:

$.ajax({ 
    ... 
    timeout: 1000, 
    error: function(jqXHR, status, error) { 
     if(status==="timeout") { 
      //do something on timeout 
     } 
    } 
});​ 

Для пользовательских ошибок (т. Е. От PHP) используется обратный вызов success::

$.ajax({ 
    ... 
    success: function (data, status, jqXHR) { 
     if (data == something) 
      // error 
    } 
}); 
+0

thanks делает теперь больше смысла – Baig

+0

, так что если есть несколько сообщений, которые я хочу вернуть в своем вызове ajax, но все они должны отображаться в разных div, которые размещаются на разных частях экрана, как это сделать? – Baig

+0

'данные' может быть ... любые данные. Включая массивы. – Forien

1

At present I am managing this inside the success part of AJAX, is this the right way to do it?

Это несколько субъективно.

If yes then what is AJAX error: function for?

То есть в первую очередь на наличие ошибок HTTP (например, когда на стороне сервера код does't работать так, как вы ожидаете, что это), хотя он также будет стрелять, если (например) ответ JSON имеет неверный формат и не может анализироваться.


Дело может быть сделано, что, учитывая неадекватные данные, представленные через форму, ваш серверный код должен сгенерировать код ошибки HTTP (в этом случае обработчик ошибок будет стрелять), но ни один из standard status codes кажется подходит для этого, и это не обычный способ решения проблемы.

1

error - это функция вызова в случае, если вы не вызвали вызов ajax (например, URL-адрес не найден). Это не имеет никакого отношения к правильной проверке ошибки .


В вас случае, вы хотите сделать ваши verficications (т.е. есть имя представлено?) в вашем PHP коде. и вернуть true (или false) - или на самом деле, что бы вы ни хотели, точка должна определить, нормально ли это или нет.

Затем в функции обратного вызова success отображается (или нет) сообщение об ошибке в зависимости от возвращаемого значения.


Однако, если элемент управления так просто, как есть значение в этой области? вы можете не использовать для этого вызов ajax, но проверку javascript/jquery до submit.

0

Как обычный подход, многие разработчики отдельно ошибки фронтэнда и ошибки бэкэнда:

как ошибка во внешнем интерфейсе есть отсутствует ввод текст, или двойной щелчок на кнопке submit. Такие ошибки обычно управляются в функции beforeSend:, потому что было бы пустой тратой времени на отправку запросов AJAX с отсутствующими данными. Вы можете остановить запрос простым заявлением return false, как обсуждалось here. Многие люди также используют JQuery validation plugin, который работает очень хорошо.

как ошибки на сервере есть значения, которые не подтверждаются вашим серверным языком (PHP или другими) или более технические проблемы, такие как внутренняя ошибка сервера или таймаут. В этом случае вы можете использовать функцию error:, также объясненную @Forien, разделяя значения errorStatus, чтобы дать пользователям более читаемую обратную связь.

Надеюсь, что это поможет

Смежные вопросы