使用Ajax的jqGrid自定义编辑规则函数显示“自定义函数应返回数组!”

时间:2012-02-28 21:21:17

标签: javascript ajax jqgrid

我正在使用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 个答案:

答案 0 :(得分:4)

你的validateCar()没有返回任何内容,因为AJAX是异步的。即使是这样,您也会从分配为success处理程序的函数返回一些内容,而不是从外部validateCar()函数返回。

$.ajax的响应到来时,该方法很久以前就会返回。你要么必须使用同步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;
} 

或重新设计你的功能。