Функция правила пользовательского редактирования jqGrid с использованием Ajax отображает «Пользовательская функция должна возвращать массив!» - PullRequest
0 голосов
/ 29 февраля 2012

Я использую jqGrid, последнюю версию, и когда я применяю правило редактирования, которое является пользовательской функцией, и выполняю ajax, оно всегда возвращает " Пользовательская функция всегда должна возвращать массив ".Я думаю, что это проблема времени, поэтому я установил для ajax значение false, но проблема все еще остается.У любого есть пользовательская функция, которая выполняет вызов ajax, который работает правильно.Ценю любую помощь.Спасибо.

jQuery(softwareReportingGrid.gridId).jqGrid({
    editurl: 'clientArray',
    datatype: 'json',
    colNames: ["Car"],
    colModel: [
        {"index":"Car","name":"Car","edittype":"text","editable":true,
            "editrules":{"custom":true,"custom_func":validateCar,"required":true}}
    ....

У меня есть следующая функция javascript, которая называется

validateCar: function (value, colname) {
    jQuery.ajax({
        async: false,
        url: validateCarUrl,
        data: { carName: value },
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        success: function (data) {
            if (data) {
                return [true, '']
            } else {
                return [false, value + ' is not a valid car'];
            }
        },
        error: function () { alert('Error trying to validate car ' + value); }
    });
} 

1 Ответ

4 голосов
/ 29 февраля 2012

Ваш validateCar() ничего не возвращает, потому что AJAX асинхронный.И даже если это так, вы возвращаете что-то из функции, назначенной обработчиком success, а не из внешней функции validateCar().

Когда приходит ответ от вашего $.ajax, метод возвращает longтому назад.Вы должны либо использовать синхронный AJAX (отчасти обескураженный):

validateCar: function (value, colname) {
    var result = null;
    jQuery.ajax({
        async: false,      //this is crucial
        url: validateCarUrl,
        data: { carName: value },
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        success: function (data) {
            if (data) {
                result = [true, '']
            } else {
                result = [false, value + ' is not a valid car'];
            }
        },
        error: function () { alert('Error trying to validate car ' + value); }
    });
    return result;
} 

, либо изменить свою функцию.

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