【问题标题】:jqGrid custom edit rule function using Ajax displays "Custom Function should return array!"使用 Ajax 的 jqGrid 自定义编辑规则函数显示“自定义函数应该返回数组!”
【发布时间】:2012-02-28 21:21:17
【问题描述】:

我使用的是最新版本的 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); }
    });
} 

【问题讨论】:

    标签: javascript ajax jqgrid


    【解决方案1】:

    您的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;
    } 
    

    或重新设计您的功能。

    【讨论】:

    • 感谢您的快速回复。
    • @TwoSeeds:你应该使用你的权利投票给有用的答案,就像我自己做的那样。您每天有权对大约 30 个问题或答案进行投票(请参阅 here)。如果您使用权利,您将帮助页面的其他访问者,您还将帮助搜索引擎。
    • 我修复了第二个 result = [ 中的小打字错误(它只是 result [)。对于ajax: false,您的意思可能是cache: false
    • @Oleg:感谢您的纠正!我看到 OP 现在将 ajax: false 更改为 async: false 这使我的一半答案毫无意义......
    • 是的,我同意,但是未知的ajax: false 选项现在只存在于您的代码中。另一方面,cache: false 的使用在 HTTP GET(默认为 type: "GET")的情况下会有所帮助,尤其是对于 Internet Explorer。所以我认为最好删除未知的ajax: false 或修复类似cache: false 的东西。您应该从答案中自己决定代码中应该包含的内容。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 2016-09-24
    • 2020-08-20
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    相关资源
    最近更新 更多