Mensagem de erro do lado do servidor jqgrid / manipulação de validação

Nas minhas respostas json, tenho propriedades ‘STATUS’ e ‘errors’. Como pode usar essas propriedades de erros com jqGRid. Para analisar todos os erros e mostrá-los em uma checkbox de diálogo.

Basicamente, basta verificar, se status: ‘ERROR’, em seguida, exibir todos os erros.

Obrigado!

Na última parte da resposta à sua pergunta anterior, tentei já tentar dar a resposta à sua pergunta atual. Provavelmente eu me expressei não claro o suficiente.

Você não deve colocar e informações sobre o erro dentro da resposta bem-sucedida padrão. Você deve apenas seguir as regras principais do protocolo HTTP usado para comunicação entre o servidor e o cliente.

Os dados de carregamento na grade, a edição das linhas e toda a comunicação Ajax com o servidor são implementadas com relação ao protocolo HTTP. Toda resposta HTTP tem o código de status na primeira linha da resposta. É muito importante entender o significado disso.

A solicitação bem-sucedida típica com dados JSON parece seguir

HTTP/1.1 200 OK ... Content-Type: application/json ... {"page":"1",....} 

Se a URL que tenta carregar não existir, por exemplo, a primeira linha da resposta do servidor será

 HTTP/1.1 404 Not Found 

e jqGrid com base no código de status HTTP (404 no caso) * não tentará interpretar a resposta do servidor como os dados que contêm dados com o conteúdo da grade.

A demo tem o seguinte código

 $("#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); } }); 

que exibem a mensagem de alerta como o seguinte:

insira a descrição da imagem aqui

Além disso, no jqXHR.responseText você encontrará o corpo inteiro da resposta do servidor como string. O próximo alerta mostra a resposta.

Com todas as informações acima, eu queria mostrar a você que as respostas de erro e as respostas bem-sucedidas serão processadas de outra maneira pela pilha inteira de software que você usa (jqGrid, jQuery, object XMLHttpRequest , …). Portanto, você deve usar códigos de status HTTP de erro nas respostas do servidor, se o erro for detectado. Na resposta, por exemplo, você verá como fazer isso no caso do uso da ASP.NET MVC.

Aqui você pode encontrar outra versão da implementação loadError que espera a input no formulário JSON: {"Source":"some error source",Message:"Description of the error"} , e a saída do erro será como aqui

insira a descrição da imagem aqui

mas o código pode exibir adicionalmente a resposta HTML gerada pelo seu servidor web:

insira a descrição da imagem aqui

Você pode facilmente modificar o código para o seu propósito. O código que você pode encontrar abaixo

 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( '
' + decodeErrorMessage(jqXHR, textStatus, errorThrown) + '
' ); }

onde a function decodeErrorMessage definida como

 var decodeErrorMessage = function (jqXHR, textStatus, errorThrown) { var htmlBody, errorInfo, i, errorText = '', errorIconSpan = ''; if (textStatus) { errorText = textStatus; } if (errorThrown) { if (errorText.length > 0) { errorText += '
'; } 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 += "
"; } errorText += errorInfo[i].Source + ": " + errorInfo[i].Message; } } catch (e) { } errorText = errorIconSpan + errorText; } else { htmlBody = /([\s\S]*)< \/body>/i.exec(jqXHR.responseText); if (htmlBody !== null && htmlBody.length > 1) { errorText = htmlBody[1]; } } } else { errorText = errorIconSpan + errorText; } return '
' + errorText + '
'; };

ATUALIZAÇÃO : O jqGrid grátis contém a implementação padrão de loadError (veja aqui e aqui ), que gera uma mensagem de erro relativamente legível no caso da maioria dos erros do Ajax. Exibe o texto resultante no erro div, existente acima do corpo da grade. Portanto, é recomendável testar se o comportamento padrão produz bons resultados antes do uso de loadError customizado. Se você realmente precisa criar seu próprio loadError então você pode colocar a mensagem de erro no erro div usando o método displayErrorMessage do jqGrid livre: $("#grid").jqGrid("displayErrorMessage", customErrorMessage);

Eu estava procurando um problema semelhante há algum tempo e topei com essa resposta . Leia a resposta de Oleg. Ele é o homem jqgrid 😉