복붙노트

[JQUERY] 있는 jqGrid 서버 측 오류 메시지 / 검증 처리

JQUERY

있는 jqGrid 서버 측 오류 메시지 / 검증 처리

해결법


  1. 1.이전의 질문에 대한 답변의 마지막 부분에서 나는 이미 현재의 문제에 대한 답을 주려고 노력했다. 아마 내가 나에게 분명하지 충분히 표현했다.

    이전의 질문에 대한 답변의 마지막 부분에서 나는 이미 현재의 문제에 대한 답을 주려고 노력했다. 아마 내가 나에게 분명하지 충분히 표현했다.

    당신은 배치 표준 성공적인 응답의 오류 내부에 대한 정보는 안된다. 당신은 서버와 클라이언트 사이의 통신에 사용되는 HTTP 프로토콜의 기본 규칙을 따라야합니다.

    행과 서버와의 모든 아약스 통신의 편집 그리드의 데이터를로드는 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);
        }
    });
    

    이는 다음과 같은 경고 메시지를 표시합니다 :

    더욱이 jqXHR.responseText에 당신은 문자열로 서버 응답의 전신을 찾을 수 있습니다. 다음 경고는 응답을 보여줍니다.

    위의 모든 정보를 가지고 내가 오류 응답 성공적인 응답이 당신이 사용하는 소프트웨어의 전체 스택에 의해 다른 방식으로 처리됩니다 있음을 보여주고 싶었다 (있는 jqGrid, jQuery를, XMLHttpRequest의 개체, ...). 당신은 단지 서버 응답에 오류 HTTP 상태 코드를 사용해야합니다 그래서 오류가 감지 될 경우. 예를 들어이 질문에 당신은 사용 ASP.NET MVC의 경우이 작업을 수행하는 방법을 볼 수 있습니다.

    여기 또 다른 JSON 형태의 입력을 기다리는 loadError 구현의 버전을 확인할 수 있습니다 { "소스": "일부 오류 소스", 메시지 : "오류에 대한 설명을"}, 에러 출력은 여기처럼 될 것입니다

    그러나 코드는 웹 서버에 의해 생성 된 추가 HTML 응답을 표시 할 수 있습니다 :

    당신은 쉽게 목적에 코드를 수정할 수 있습니다. 당신이 검색 할 수있는 코드

    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.*?>([\s\S]*)<\/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>';
        };
    

    UPDATE : 무료있는 jqGrid 가장 아약스 오류의 경우에는 상대적으로 읽을 수있는 오류 메시지를 생성 loadError의 기본 구현 (여기와 여기 참조)이 포함되어 있습니다. 그것은 그리드의 몸 위에 기존의 오류 DIV의 결과 텍스트를 표시합니다. 따라서이 테스트를 권장 사용자 정의 loadError의 사용 전 기본 동작 생산 좋은 결과 여부. 당신이 정말로 다음 자신의 loadError를 작성해야하는 경우의 displayErrorMessage 방법을 사용하여 오류 사업부에서 오류 메시지를 배치 할 수 있습니다 무료있는 jqGrid :. $ ( "# 그리드")있는 jqGrid ( "displayErrorMessage", customErrorMessage);


  2. 2.나는 얼마 전에 비슷한 문제를 찾고이 답변에 충돌했다. 올렉의 답변을 읽어보십시오. 그는있는 jqGrid 남자입니다 ;-)

    나는 얼마 전에 비슷한 문제를 찾고이 답변에 충돌했다. 올렉의 답변을 읽어보십시오. 그는있는 jqGrid 남자입니다 ;-)

  3. from https://stackoverflow.com/questions/6960208/jqgrid-server-side-error-message-validation-handling by cc-by-sa and MIT license