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

Two*_*eds 0 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}}
    ....
Run Code Online (Sandbox Code Playgroud)

我有以下 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); }
    });
} 
Run Code Online (Sandbox Code Playgroud)

Tom*_*icz 5

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;
} 
Run Code Online (Sandbox Code Playgroud)

或重新设计您的功能。