В моих ответах json у меня есть свойства’ STATUS ‘и’ errors ‘. Как можно использовать эти свойства ошибок с jqGRid. Разобрать все ошибки и показать их в диалоговом окне.

В основном просто проверьте, если статус: «ОШИБКА», а затем отобразите все ошибки.

Спасибо!

В последней части ответ на ваш предыдущий вопрос я уже пытался дать ответ на ваш текущий вопрос. Вероятно, я выразил мне не достаточно ясно.

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

Загрузка данных в сетке, редактирование строк и все взаимодействия Ajax с сервером осуществляются в соответствии с протоколом HTTP. Каждый HTTP-ответ имеет код состояния в первой строке ответа. Это очень важно понять смысл этого.

Типичный успешный запрос с данными JSON выглядит следующим образом:

HTTP/1.1 200 OK
...
Content-Type: application/json
...

{"page":"1",....}

Если URL, который пытается загрузить, не существует, например, первая строка ответа сервера будет

HTTP/1.1 404 Not Found

и jqGrid на основе кода состояния HTTP. (В случае 404) * не будет пытаться интерпретировать ответ сервера как данные, которые содержат данные с содержимым сетки.

Демонстрация имеет следующий код

$("#list").jqGrid({
    url: 'Unknown.json', // there are no file with the name
    datatype: 'json',
    // ... some other typical parameters
    loadComplete: function () {
        alert("OK");
    },
    loadError: function (jqXHR, textStatus, errorThrown) {
        alert('HTTP status code: '   jqXHR.status   'n'  
              'textStatus: '   textStatus   'n'  
              'errorThrown: '   errorThrown);
        alert('HTTP message body (jqXHR.responseText): '   'n'   jqXHR.responseText);
    }
});

, которая отображает предупреждающее сообщение следующим образом:

enter image description here

Кроме того, в jqXHR.responseText вы найдете полный текст ответа сервера в виде строки. Следующее предупреждение показывает ответ.

Со всей приведенной выше информацией я хотел показать вам, что ответы об ошибках и успешные ответы будут обрабатываться другим способом всем стеком программного обеспечения, которое вы используете (jqGrid, jQuery, XMLHttpRequest object, …). Таким образом, вы должны просто использовать коды ошибок HTTP в ответах сервера, если ошибка будет обнаружена. Например, в ответ вы увидите, как это сделать в случае использования ASP.NET MVC.

говорится, что вы можете найти другую версию реализации loadError, которая ожидает ввода в форме JSON: {"Source":"some error source",Message:"Description of the error"}, и вывод ошибки будет таким же, как здесь

enter image description here

, но код может дополнительно отображать ответ HTML, сгенерированный вашей сетью сервер:

enter image description here

Вы можете легко изменить код в соответствии с вашими целями. Код, который вы можете найти ниже

loadComplete: function () {
    // remove error div if exist
    $('#'   this.id   '_err').remove();
},
loadError: function (jqXHR, textStatus, errorThrown) {
    // remove error div if exist
    $('#'   this.id   '_err').remove();

    // insert div with the error description before the grid
    $(this).closest('div.ui-jqgrid').before(
        '<div id="'   this.id   '_err" style="max-width:'   this.style.width  
            ';"><div class="ui-state-error ui-corner-all" style="padding:0.7em;float:left;">'  
            decodeErrorMessage(jqXHR, textStatus, errorThrown)  
            '</div><div style="clear:left"/></div>'
    );
}

, где функция decodeErrorMessage определена как

var decodeErrorMessage = function (jqXHR, textStatus, errorThrown) {
        var htmlBody, errorInfo, i, errorText = '',
            errorIconSpan = '<span class="ui-icon ui-icon-alert" style="float:left; display: inline-block; margin-right: .3em;"></span>';
        if (textStatus) {
            errorText = textStatus;
        }
        if (errorThrown) {
            if (errorText.length > 0) {
                errorText  = '<hr/>';
            }
            errorText  = errorThrown;
        }
        if (typeof (jqXHR.responseText) === "string") {
            if (jqXHR.responseText.charAt(0) === '[') {
                try {
                    errorInfo = $.parseJSON(jqXHR.responseText);
                    errorText = "";
                    for (i = 0; i < errorInfo.length; i  = 1) {
                        if (errorText.length !== 0) {
                            errorText  = "<hr/>";
                        }
                        errorText  = errorInfo[i].Source   ": "   errorInfo[i].Message;
                    }
                } catch (e) { }
                errorText = errorIconSpan   errorText;
            } else {
                htmlBody = /<body.*?>([sS]*)</body>/i.exec(jqXHR.responseText);
                if (htmlBody !== null && htmlBody.length > 1) {
                    errorText = htmlBody[1];
                }
            }
        } else {
            errorText = errorIconSpan   errorText;
        }
        return '<div style="float:left">'   errorText   '</div>';
    };

ОБНОВЛЕНИЕ : Free jqGrid содержит реализация по умолчанию из loadError (см. говорится, что и говорится, что ), который генерирует относительно читаемое сообщение об ошибке в случае наибольшего количества Ajax ошибки. Он отображает полученный текст в div ошибки, существующем над телом сетки. Таким образом, рекомендуется проверить, дают ли поведение по умолчанию хорошие результаты перед использованием custom loadError Regex для анализа одного значения из допустимой строки CSV: loadError, затем вы можете поместить сообщение об ошибке в div ошибки, используя метод displayErrorMessage бесплатно jqGrid: $("#grid").jqGrid("displayErrorMessage", customErrorMessage);

Некоторое время назад я искал похожую проблему и наткнулся на этот ответ . Прочтите ответ Олега. Он человек из jqgrid ; -)