1

提交不正确的数据时,JQGrid 不会在表单中显示错误。它适用于我的本地机器,但不适用于生产。它曾经在 prod 中工作,但在过去的几个月里我做了一些更改,但不确定是哪个更改破坏了它。我正在使用 JQGrid 4.4.1、jquery 1.7.2 和 MVC 4。浏览器中的错误显示如下

Uncaught SyntaxError: Unexpected token < jquery%20-1.7.2.min.js:3
e.extend.parseJSON jquery%20-1.7.2.min.js:3
editItems.errorTextFormat WaterReadingCapture:1291
$.extend.complete jquery.jqGrid.src.js:7572
o jquery%20-1.7.2.min.js:3
p.fireWith jquery%20-1.7.2.min.js:3
w jquery%20-1.7.2.min.js:10
d jquery%20-1.7.2.min.js:10

编辑

这是我从服务器得到的。正文中包含此内容的 Html 页面。我还升级了 RazorEngine。问题可能出在服务器上,与 jquery 和 jqgrid 无关吗?但是我从 prod 复制了整个站点并在我的本地计算机上运行它并且它有效。

<h2>500 - Internal server error.</h2>
  <h3>There is a problem with the resource you are looking for, and it cannot be displayed.</h3>

WaterReadingCapture

 errorTextFormat: function (data) {
                      return '<span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span>' +
                     "<strong>" + $.parseJSON(data.responseText).Message + "<strong>";
                   },

JQGrid

if(Status != "success") {
    ret[0] = false;
    ret[1] = $($t).triggerHandler("jqGridAddEditErrorTextFormat", [data, frmoper]);
    if ($.isFunction(rp_ge[$t.p.id].errorTextFormat)) {
        ret[1] = rp_g
    e[$t.p.id].errorTextFormat.call($t, data);
    } else {
        ret[1] = Status + " Status: '" + data.statusText + "'. Error code: " + data.status; // line of error
    }

} 别的 {

编辑 我恢复了 6 个月前的备份,它仍然给出同样的错误,我知道它当时有效。因此 IIS 或服务器中的某些内容发生了变化。谢谢您的帮助

4

2 回答 2

0

很久以前就修复了这个问题。问题是 IIS 没有发送详细的错误。不要不知道选项如何从详细错误更改为本地请求的详细错误和 IIS 中错误页面模块上远程请求的自定义错误页面。将其改回详细错误并从此开始工作。

谢谢

于 2015-03-06T08:50:32.423 回答
0

我认为问题出在errorTextFormat您使用的实现中。data参数是object,它是object的jqXHR超集XMLHTTPRequest。两者都支持getResponseHeader方法,您可以使用该方法来检测来自服务器的响应是包含 JSON 数据还是 HTML 数据。所以你可以测试类似的东西

errorTextFormat: function (data) {
    var contentType = xhr.getResponseHeader("Content-Type");
    if (typeof contentType === string &&
            contentType.split(";")[0] === "application/json") {
        // you can use $.parseJSON(data.responseText) here
        return '<span class="ui-icon ui-icon-alert" ' +
           'style="float: left; margin-right: .3em;"></span>' +
           "<strong>" + $.parseJSON(data.responseText).Message + "<strong>";
    }
    return data.responseText;
}

我使用contentType.split(";")[0]是因为“Content-Type”标头可以是"application/json; charset=utf-8""application/json"

于 2013-10-24T15:09:08.403 回答