this.p не определено jqgrid - PullRequest
0 голосов
/ 06 марта 2012

У меня есть интересная проблема.Я сделал это на нескольких страницах с несколькими сетками.Первая сетка работает нормально, вторая сетка в этом случае не загружается.и выдайте следующую ошибку:

this.p не определено

... sArray (i)) {P = true; h = "last"; U = f} else {i =[i]; P = false} this.each (function () {var D = il .. line 140 jquery.jqGrid.min.js

Пользователь нажимает на строку и устанавливает некоторые переменные изатем вызывает функцию locationGrid ().

Как я уже говорил, это работало для меня несколько раз в прошлом, однако на этой странице это не удалось. Я дважды проверил и получаю данные обратно, как показано ниже:

{"d": "{\" total \ ": 1, \" page \ ": 0, \" records \ ": 1, \" lines \ ": [{\" invPartLocId \ ":1053, \ "inventoryMasterId \": 5, \ "место \": нулевой, \ "ItemType \": \ "S \", \ "currentQanity \": 1, \ "adjustedQauntity \": 0, \ "newLocationQty \": 0, \" deptCode \ ": \" 1401 \ "}]}"}

Любая помощь приветствуется.

    function locationGrid() {
        $('#invLocAdjustGrid').jqgrid({
            height: 290,
            loadui: "block",
            datatype: function (rdata) { getLocationData(rdata); },
            colNames: ['invPartID', 'locationPartID', 'Loctaion', 'Type', 'Current QTY', 'Adjusted QTY', 'New Location QTY', 'Dept. Code'],
            colModel: [
                    { name: 'invPartLocId', width: 2, sortable: false, editable: false, hidden: true },
                    { name: 'inventoryMasterId', width: 2, sortable: false, editable: false, hidden: true },
                    { name: 'location', width: 250, editable: false, sortable: false },
                    { name: 'itemType', width: 120, editable: false, sortable: false, align: 'center' },
                    { name: 'currentQanity', width: 50, editable: false, sortable: false },
                    { name: 'adjustedQauntity', width: 50, editable: false, sortable: false },
                    { name: 'newLocationQty ', width: 50, editable: false, sortable: false },
                    { name: 'deptCode', width: 50, editable: false, sortable: false }
                ],
           pager: jQuery('#rptCodesPager'),
            viewrecords: true,
            width: 890,
            gridComplete: function () {
                $('#load_invLocAdjustGrid').hide();
                $(this).prop('p').loadui = 'enable';
                $('#lui_invLocAdjustGrid').hide();

            },
            afterInsertRow: function (rowid, aData) {

            },
            ondblClickRow: function (rowid) {
                var myID = $('#invLocAdjustGrid').getCell(rowid, 'invPartLocId');
                Ldclicked(myID);
            }
        });
    }
    function getLocationData(rdata) {
        var theID = tempID;
        tempID = "";
        var myDTO = { 'id': theID };
        var toPass = JSON.stringify(myDTO);
        $.ajax({
            type: 'POST',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            url: "INV_Inventory_Adjustment.aspx/getInventoryLocationById",
            data: toPass,
            success: function (data, textStatus) {
                if (textStatus == "success")
                    ReceivedLocationData(JSON.parse(getMain(data)).rows);
            },
            error: function (data, textStatus) { alert('An error has occured retrieving data!'); }
        });
    }
    function ReceivedLocationData(data) {
        var thegrid = $('#invLocAdjustGrid');
        var isGood = data.length;
        for (var i = 0; i < isGood; i++) {
                thegrid.addRowData(i + 1, data[i]);


            }
    }

1 Ответ

4 голосов
/ 06 марта 2012

Извините, но ваш код глючит. Более того, я рекомендую переписать весь код и постараюсь объяснить, почему.

Первая важная ошибка заключается в том, что вы используете $('#invLocAdjustGrid').jqgrid({...}); в locationGrid вместо $('#invLocAdjustGrid').jqGrid({...});. JavaScript чувствителен к регистру, поэтому очень важно использовать jqGrid вместо jqgrid.

Следующая проблема существует, потому что вы используете некоторые переменные и функции tempID, Ldclicked и getMain, которые вы не определили в размещенном коде.

После внесения минимальных изменений работает демоверсия . Я прокомментировал только «POST», чтобы использовать HTTP GET, потому что я получаю JSON непосредственно из файла и не имею активных компонентов на сервере wed.

Еще одна проблема, с которой вы столкнулись, заключается в том, что код вашего сервера сериализует результаты дважды . Обычно проблема возникает из-за неправильного использования ASMX WebMethods. Нужно , а не конвертировать объект в JSON вручную. Вместо этого нужно просто вернуть сам объект. Из-за проблемы свойство d в JSON не является самим объектом и является строкой, которую необходимо проанализировать еще раз:

{
    "d": "{\"total\":1,\"page\":0,\"records\":1,\"rows\":[{\"invPartLocId\":1053,\"inventoryMasterId\":5,\"location\":null,\"itemType\":\"S\",\"currentQanity\":1,\"adjustedQauntity\":0,\"newLocationQty\":0,\"deptCode\":\"1401 \"}]}"
}

Даже такие неправильно отформатированные данные могут быть прочитаны jqGrid без использования datatype в качестве функции. Более того, вы всегда должны использовать gridview: true и никогда не использовать afterInsertRow и почти никогда не использовать addRowData. Модифицированный код может быть примерно следующим:

var tempID = "abc";
$('#invLocAdjustGrid').jqGrid({
    url: "INV_Inventory_Adjustment.aspx/getInventoryLocationById",
    mtype: "POST",
    datatype: "json",
    postData: {
        id: function () { return tempID; } // ??? I don't know which data should be send
    },
    ajaxGridOptions: { contentType: "application/json" },
    serializeRowData: function (data) {
        return JSON.stringify(data);
    },
    beforeProcessing: function (data) {
        $.extend (true, data, $.parseJSON(data.d));
    },
    jsonReader: {repeatitems: false},
    loadonce: true,
    colNames: ['invPartID', 'locationPartID', 'Loctaion', 'Type', 'Current QTY', 'Adjusted QTY', 'New Location QTY', 'Dept. Code'],
    colModel: [
        { name: 'invPartLocId', width: 2, key: true, hidden: true },
        { name: 'inventoryMasterId', width: 2, hidden: true },
        { name: 'location', width: 250 },
        { name: 'itemType', width: 120, align: 'center' },
        { name: 'currentQanity' },
        { name: 'adjustedQauntity' },
        { name: 'newLocationQty ' },
        { name: 'deptCode' }
    ],
    cmTemplate: {sortable: false, width: 50},
    pager: '#rptCodesPager',
    viewrecords: true,
    gridview: true,
    loadui: "block",
    height: 290,
    width: 890,
    ondblClickRow: function (rowid) {
        //Ldclicked(rowid);
    }
});

Следующая демонстрация демонстрирует, что код работает. Я включил в демо опцию loadonce: true, которая также может быть полезна для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...