0

使用 Fiddler2,在使用 IE6 时,我看到 POST 请求不包含下面指定的 postData。我已经验证路径是在 JQGrid 初始化时定义的。它适用于 IE9 和 Chrome。我正在调用 WCF POST 服务。在没有参数的情况下进行调用,并挂起 IE6 且没有响应。

任何想法表示赞赏!编辑:

最新更新:已解决

问题是我的动态调整大小代码的副作用;我在窗口调整大小事件上调整网格包装器 div 的大小,不幸的是,在 IE6 中,内容调整大小会冒泡到窗口导致递归。这就像在谈论我的日记,但也许这会帮助其他人。

好的,我可以通过单独的 AJAX 调用取回数据(通过 Fiddler 验证),并使用 AddJSONData() 方法绑定到网格。调试器在数据类型的末尾弹出:回调函数...但是如果我让它继续执行,IE6 会在此时挂起。我仍然坚持这一点!

                grid.jqGrid({
                datatype: function ()
                {
                    var ts = this,      // - cache 'this' to use later in the complete callback
                    parameters = this.p;         // - cache the grid parameters

                    $("#list")[0].addJSONData(_gridData);

                    if ($.isFunction(parameters.loadComplete))
                        parameters.loadComplete.call(ts, _gridData);

                    if (parameters.loadonce || parameters.treeGrid)
                        parameters.datatype = "local";

                    debugger;
                },

当我可以的时候,我会努力解决这个问题。我为 GetData 服务方法编写了一个测试 ajax 调用,它在正文中很好地填充了 POST 数据,并返回了所有网格数据。好的,所以 JQGrid 没有在请求正文中设置参数,我的 JQGrid 是否配置错误?请指教!


好吧,肯定不会很喜欢。在 serializeGridData 函数中,事实证明 JSON2 stringify 将 postData 视为字符串?键名周围的引号被转义:

IE6: "{\"path\":\"c:\\Source\\TestUpload\\Uploads\\5ec33030-ab7b-4480-9deb-3153726c1ede.xls\",\"_search\":true,\"nd\":1349365262553,\"rows\":15,\"page\":1,\"sidx\":\"IDNumber\",\"sord\":\"desc\"}"

IE9:  {"path":"c:\\Source\\TestUpload\\Uploads\\3228b61e-4f1b-4ce4-813e-10f58b1b4285.xls","_search":true,"nd":1349365395840,"rows":15,"page":1,"sidx":"IDNumber","sord":"desc"}

好的,所以我使用 Fiddler 的 compose 功能来修改 IE6 JQGrid 请求,使用有效的会话 cookie,并添加 POST 数据:

{"path":"c:\\Source\\TestUpload\\Uploads\\cb238b83-3c6e-42c2-92be-0e8d08dd905e.xls","_search":true,"nd":1349284471504,"rows":15,"page":1,"sidx":"IDNumber","sord":"desc"}

......它工作得很好。所以出于某种原因,JQGrid 没有填充 IE6 的 POST 数据?有任何想法吗?


值得注意的是,请求标头中的内容长度是正确的,只是没有关联的 POST 数据。我尝试在 Fiddler 中的 XMLHttpRequests 上设置断点,但它没有在 JQGrid 请求上中断;然而,它确实在之前的 AJAX 请求中按预期中断了。

这是 IE9 中成功的 jqgrid POST 请求的原始标头:

POST http://localhost/Loader.svc/GetData?_=1349274977838 HTTP/1.1
Accept: application/json, text/javascript, */*; q=0.01
Content-Type: application/json
X-Requested-With: XMLHttpRequest
Referer: http://localhost/BulkOrderPersonalized.aspx
Accept-Language: en-US,fr;q=0.5
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Host: localhost
Content-Length: 169
Connection: Keep-Alive
Pragma: no-cache
Cookie: ASP.NET_SessionId=qlj50u45mk4f5q55izyj23us;    MerchantV2=BAEE474A47A5264EF3B3C1977173019C569F51792BEA95C1F129634F6B5E8C8475631791B382D7159E78364979FE541B9337D3C5D2B1B0563A653E6DFD738D0D291A9CFADB3555FA4E3D891BD8912D6E0F315A51E61F240F69A6CA061B6CEA17868F9D7E33C36415DEAB3EC9178A9A2748CF002B

{"path":"c:\\Source\\TestUpload\\Uploads\\b7f0ba08-c9f5-46b3-a856-dfa33410be75.xls","_search":true,"nd":1349274977961,"rows":15,"page":1,"sidx":"IDNumber","sord":"desc"}

这是挂起 IE6 的 POST 请求的原始标头:

POST http://10.8.8.72/Loader.svc/GetData?_=1349271720318 HTTP/1.1
x-requested-with: XMLHttpRequest
Accept-Language: en-us
Referer: http://10.8.8.72/BulkOrderPersonalized.aspx
Accept: application/json, text/javascript, */*; q=0.01
Content-Type: application/json
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727;     NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Host: 10.8.8.72
Content-Length: 169
Proxy-Connection: Keep-Alive
Pragma: no-cache
Cookie: ASP.NET_SessionId=5fvcrn55mrcjw145ari0h2a1;         MerchantV2=C1EB658057878B9D526DA8216B181011CA53F98BFA7A794AFFFEF7FD855E64C63244EA741FA984FDBB8699787EC387D195474B1D08F1C784E79ECC5C8F16206CE477C91891DC26673015908CBE3C012E10CB8A3DCABDC1762DD10C3D8D15ABC403C454F4231BD16F63787D6E387683F5E99634B5

唯一相关的区别似乎是 JQGrid 在使用 IE6 时不填充 POST 数据。

以前的 jQuery AJAX 调用与发布数据在 JQGrid 绑定之前执行得很好:

function GetRequestConfigs(type, issuingBank) // - get configuration objects for user; (load initially)
{
if (_configurations == null) {

    $.ajax({
        async: false,
        type: 'POST',
        url: 'Loader.svc/GetRequestConfigurations',
        data: '{"type":"' + type + '","issuingBank":"' + issuingBank + '"}',
        dataType: 'json',
        contentType: 'application/json',
        success: function(response, textStatus, xhr) {
            _configurations = JSON.parse(response.d);
        },
        error: function(xhr, textStatus, errorThrown) {
            alert(textStatus);
        }
    });
}
return _configurations;

}

此 JQGrid POST 请求失败:

grid.jqGrid({
            url: 'Loader.svc/GetData',                  // - webinvoke post method
            postData: { path: path },

            search: true,
            datatype: 'json',
            mtype: 'POST',
            loadonce: true,                             // - load data once on server side, then switch to local data handling
            ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },

            serializeGridData: function (postData)      // - process returned object from web-invoke to json
            {
                return JSON.stringify(postData);
            },

            jsonReader: {                                       // - map json to grid elements ( this is how the grid expects the data from the server )
                root: function (obj) { return obj.d.rows; },
                page: function (obj) { return obj.d.page; },
                total: function (obj) { return obj.d.total; },
                records: function (obj) { return obj.d.records; }
            }, ...
4

0 回答 0