jqgrid 服务器端验证,javascript – jqgrid服务器端错误消息/验证处理

在你以前的问题的

the answer的最后一部分,我试着给出你当前的问题的答案.也许我表示不够清楚.

您不应该将错误信息放在标准成功响应中.您应该遵循用于服务器和客户端之间通信的HTTP协议的主要规则.

根据HTTP协议实现网格中的加载数据,编辑行和与服务器的所有Ajax通信.每个HTTP响应都有响应第一行的状态代码.了解这个意义非常重要.

典型的JSON数据成功请求如下

HTTP/1.1 200 OK

...

Content-Type: application/json

...

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

如果尝试加载的URL不存在,例如服务器响应的第一行将是

HTTP/1.1 404 Not Found

和基于HTTP状态代码(在这种情况下为404)的jqGrid *将不会尝试将服务器响应解释为包含具有网格内容的数据的数据.

$("#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对象,…)以其他方式处理.所以你应该在服务器响应中使用error HTTP status codes,如果检测到错误.例如,在the answer中,如果使用ASP.NET MVC,您将看到如何执行此操作.

Here你可以找到另一个版本的loadError实现,等待JSON格式的输入:{“Source”:“一些错误源”,消息:“错误描述”},错误输出将如下所示

但代码可以显示您的Web服务器生成的HTML响应:

您可以轻松地将代码修改为您的目的.你可以在下面找到代码

loadComplete: function () {

// remove error div if exist

$('#' + this.id + '_err').remove();

},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,errorThrown) +

'

'

);

}

其中decodeErrorMessage函数定义为

var decodeErrorMessage = function (jqXHR,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]*)/i.exec(jqXHR.responseText);

if (htmlBody !== null && htmlBody.length > 1) {

errorText = htmlBody[1];

}

}

} else {

errorText = errorIconSpan + errorText;

}

return '

' + errorText + '
';

};

更新:Free jqGrid包含loadError(见here和here)的默认实现,它在大多数Ajax错误的情况下生成相对可读的错误消息.它将生成的文本显示在网格正文之上的错误div中.因此,建议测试,在使用自定义loadError之前,默认行为是否产生良好的结果.如果您真的需要创建自己的loadError,那么可以使用免费jqGrid的displayErrorMessage方法将错误消息放在错误div中:$(“#grid”).jqGrid(“displayErrorMessage”,customErrorMessage);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值