Метод postData не выполняет функцию

У меня есть две jqGrids. В первой сетке я выбираю строку, а вторая сетка обновляется данными на основе идентификатора первой сетки. По крайней мере, так должно работать.

//This is code from the second grid
postData: '{ lobId: ' + BudgetCore.getLobId() + ' }',

//Snippet from BudgetCore...
getLobId: function () {
    var row = jQuery(BudgetCore.GridTables.Lob).jqGrid('getGridParam', 'selrow');
    return row;
}

В Chrome я пытаюсь отладить функцию getLobid (), но она никогда не выполняется. Запрос postData отправлен: {lobId: null}.

Если я изменю код выше на{lobId: ' + 1 + '}' это работает, поэтому должно быть что-то не так, что заставляет эту функцию не выполняться. В консоли Chrome JS выполнение BudgetCore.getLobId () работает нормально.

Ответы на вопрос(1)

Решение Вопроса

Вы должны использовать

postData: {
    lobId: function () {
        return $(BudgetCore.GridTables.Lob).jqGrid('getGridParam', 'selrow');
    }
}

Увидетьответ Больше подробностей.

ОБНОВЛЕНО: Если вам нужно использоватьJSON.stringify дополнительно внутриserializeGridData тогда ты можешь'Используйте более простую версию:serializeGridData

serializeGridData: function (postData) { return return JSON.stringify(postData); }

Вместо этого вы должны использовать немного более сложную версиюserializeGridData который я описал вответ:

serializeGridData: function (postData) {
    var propertyName, propertyValue, dataToSend = {};
    for (propertyName in postData) {
        if (postData.hasOwnProperty(propertyName)) {
            propertyValue = postData[propertyName];
            if ($.isFunction(propertyValue)) {
                dataToSend[propertyName] = propertyValue(); // call the function
            } else {
                dataToSend[propertyName] = propertyValue;
            }
        }
    }
    return JSON.stringify(dataToSend);
}
 Dan31 окт. 2012 г., 17:47
Спасибо, теперь я понимаю.
 Dan31 окт. 2012 г., 17:25
Я пробовал это, но ASP.NET ASMX требует, чтобы данные поста были окружены ' ', Я должен был упомянуть об этом в вопросе.
 Oleg31 окт. 2012 г., 17:47
@Dan: Добро пожаловать!
 Oleg31 окт. 2012 г., 17:37
@ Дан: Извините, но вы не правы. ASMX принять" которые являются единственными символами, разрешенными для цитирования в JSON. Если вам нужно отправить информацию в ASMX, которую вы используетеserializeGridData с вызовомJSON.stringify и это'ПроисхождениеЗачем функции могутне будет использоваться. В случае, если вам нужно просто использовать модифицированную версиюserializeGridData, Увидетьответ для соответствующего кода.
 Dan31 окт. 2012 г., 17:40
Я попробую это, просто обратите внимание, что в этой же сетке (второй) у меня есть подсетка с postData: '{lobId: ' + BudgetCore.getLobId () + '}'и работает нормально.
 Oleg31 окт. 2012 г., 17:44
@ Дэн: разница в том, что выСоздайте новая подсетка каждый раз. Итак, кодpostData: '{ lobId: ' + BudgetCore.getLobId() + ' }' будет выполненмножественный раз. Кстати правильный код будет хотя быpostData: JSON.stringify({lobId: BudgetCore.getLobId()}), С другой стороны вы создаете сеткуодин раз, Итак, кодpostData: '{ lobId: ' + BudgetCore.getLobId() + ' }' будет выполнен один раз засоздавая время из jqGrid. Все последующие запросы просто используют одно и то же строковое значение.postData

Ваш ответ на вопрос