使用 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; }
}, ...