0

Fiddler2 を使用し、IE6 を使用すると、POST リクエストに以下に指定された postData が含まれていないことがわかります。JQGrid の初期化の時点でパスが定義されていることを確認しました。IE9 と Chrome で問題なく動作します。WCF POST サービスを呼び出しています。呼び出しはパラメーターなしで行われ、IE6 がハングアップし、応答がありません。

どんなアイデアでも大歓迎です!編集:

最新の更新: 解決済み

この問題は、私の動的サイズ変更コードの副作用でした。ウィンドウのサイズ変更イベントでグリッド ラッパー div のサイズを変更していましたが、残念ながら IE6 ではコンテンツのサイズ変更がウィンドウまでバブルし、再帰が発生します。これは私の日記と話しているようなものですが、おそらくこれは他の誰かの助けになるでしょう.

OK、別の AJAX 呼び出しを介して (Fiddler を介して検証された) データを取得し、AddJSONData() メソッドを使用してグリッドにバインドすることができます。デバッガーは datatype: callback 関数の最後でポップします... しかし、そのまま実行を続けると、この時点で 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 の構成機能を使用して 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 データを入力していませんか? 何か案は?


content-length はリクエスト ヘッダーで正しく、関連する POST データがないことに注意してください。XMLHttpRequests で Fiddler にブレークポイントを設定しようとしましたが、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

関連する唯一の違いは、IE6 を使用している場合、JQGrid が 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