Вопрос

Даже не уверен, что это правильный способ названия вопроса.Я знаю, что делаю вызовы AJAX неправильно...вот что я делаю прямо сейчас (кстати, я использую бэкэнд ASP.NET MVC):

я использую jQuery.ajax чтобы отправить некоторые данные в действие, которое загрузит представление, которое я фиксирую в ответе.По сути, он предоставляет некоторые данные для действия и возвращает часть HTML.

Допустим, я хотел создать проверенный вызов Ajax.Как мне вернуть сообщения проверки об ошибке?Например, форма входа в Ajax.Если пользователь не может быть проверен, я хотел бы сказать им, что...вместо того, чтобы просто ничего не делать.

Извините за наивный вопрос, просто не знаю, как его правильно сформулировать, чтобы найти решения в Google.

Заранее спасибо!

Это было полезно?

Решение

Прежде всего, если вы хотите, чтобы вызов AJAX возвращал данные, которые вы планируете использовать в своих сценариях (под использованием я подразумеваю нечто более сложное, чем отображение этих данных в div), вам, вероятно, следует возвращать данные JSON вместо HTML с вашего сервера.JSON на самом деле является объектом JS, поэтому его можно использовать в JS в момент его получения.

Итак, если вы вернете данные, т.е.

{id: 1, status: 'ok'}

Вы можете использовать что-то вроде этого, чтобы использовать эти данные.

$.ajax({
    url: "your/script/url",
    type: "POST",
    data: {login : 'foo', pass: 'bar'}, // whatever the data is
    dataType: "json",
    success: function(data){
        if (data.status === 'ok') {
            console.log('success');
        } else {
            console.log('error');
        }
    }

});

Другие советы

Для ответа вам потребуется вернуть несколько фрагментов информации.К счастью, вы можете легко сделать это, используя JSON, и jQuery автоматически обработает это за вас, если вы сообщите ему, что тип ответа — json.Объект, который вы получаете в свою функцию обратного вызова ajax, будет содержать все необходимые фрагменты данных в виде различных свойств.

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

Причина этого в том, что вызов ajax всегда будет «успешным», если только сервер фактически не смог обработать запрос и не вернул код состояния отказа http.Если результатом запроса является что-то вроде ошибки валидации, но сервер по-прежнему возвращает какой-то текстовый ответ, то вызов ajax по-прежнему считается успешным, даже если операция приложения не удалась.

Итак, если в вашем методе действия вместо возврата ваших html-данных в результате действия вы вернули такой объект:

public class AjaxResponse
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="AjaxResponse"/> class.
        /// This creates an AjaxResponse that by default indicates SUCCESS.
        /// </summary>
        public AjaxResponse()
        {
            Success = true;
            Data = new List<object>();
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="AjaxResponse"/> class.
        /// This creates an AjaxResponse that indicates FAILURE.
        /// </summary>
        /// <param name="exception">The exception.</param>
        public AjaxResponse(Exception exception)
            : this()
        {
            Success = false;
            Errors = new [] { exception.Message };
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="AjaxResponse"/> class.
        /// This creates an AjaxResponse that indicates SUCCESS.
        /// </summary>
        /// <param name="data">The data.</param>
        public AjaxResponse(object data)
            : this()
        {
            Data = data;
        }

        /// <summary>
        /// Gets or sets a value indicating whether this <see cref="AjaxResponse"/> is success.
        /// </summary>
        /// <value><c>true</c> if success; otherwise, <c>false</c>.</value>
        public bool Success
        {
            get; set;
        }

        /// <summary>
        /// Gets or sets the data.
        /// </summary>
        /// <value>The data.</value>
        public object Data
        {
            get; set;
        }

        /// <summary>
        /// Gets or sets the errors.
        /// </summary>
        /// <value>The errors.</value>
        public string[] Errors
        {
            get; set;
        }
    }

Это преобразуется в объект JavaScript со свойствами «.Success», «.Data» и «.Errors».

Итак, если бы ваш код проверки заполнил массив Errors всеми ошибками проверки, вашей функции обратного вызова ajax было бы легко выполнить

  1. определить, что намеченная цель вызова не удалась, поскольку для свойства SUCCESS было установлено значение «сбой».

  2. Получать все соответствующие строки ошибок.

Вы можете легко сделать это с помощью такого шаблона в своих методах действий:

    try
    {
        instance.Validate();
        return Json(new AjaxResponse(myHtmlData));
    }
    catch(Exception ex)
    {
        var response = new AjaxResponse(ex);

        // Get your validation errors here, put them into
        // your ajax response's Errors property.

        return Json(response);
    }

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

$.ajax call действительно обеспечивает функциональность для обработки успешных ответов, а также ответов на ошибки.Нет необходимости всегда возвращать успех с установленным флагом ошибки, который вам нужно проверить на клиенте.

Я не уверен, полностью ли я понял, что вы имеете в виду.Но ваш пример сообщения проверки об ошибке не будет ли это работать следующим образом:

  1. Пользователь нажимает на какую-либо кнопку/ссылку, что вызывает действие.
  2. Асинхронное сообщение отправляется обратно на сервер, передавая идентификатор пользователя (здесь вы должны помнить о безопасности)
  3. На сервере выполняется необходимая проверка и отправляется ответ (в XML, Json, непосредственно сообщение, закодированное как HTML)
  4. Вернувшись на клиентскую сторону, вы получаете ответ в коде JavaScript и размещаете его на странице соответствующим образом.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top