【问题标题】:Can jqgrid formatter call an ajax/json method?jqgrid 格式化程序可以调用 ajax/json 方法吗?
【发布时间】:2012-09-13 11:22:29
【问题描述】:

我在 jqGrid 中的一个列上使用了格式化程序。格式化程序使用一些逻辑来决定要显示什么,在某些情况下,它会调用 ajax 方法。我已经在 Fiddler 中验证了正确的数据来自我的 ajax 调用。我还在 Chrome 调试工具中验证了我的变量设置是否正确。但是,序列完全不正确,因此我的列中的返回值是“未定义”。我可以在调试工具的时间线中看到我的 getJSON 调用在 jqgrid 已经加载后被调用。

我先尝试了这个:

function myFormatter(cellvalue, options, rowObject) 
{
    if (rowObject[0] == something) {
        $.getJSON('@Url.Action("MyAction", "MyController"), function (myResult) {
            var myObject = myResult[0];
            return myObject.myID;
        });
    }
    else {
        return "";
    }
}

我还尝试使用带有 async=false 的 ajax 调用,我尝试了 type 和 dataType 的不同值,但结果都是一样的:

function myFormatter(cellvalue, options, rowObject) 
{
    if (rowObject[0] == something) {
        $.ajax({
            type: 'POST',
            url: '@Url.Action("MyAction", "MyController"),
            async: false,
            success: (function(result) {
                var myObject = myResult[0];
                return myObject.myID;
            })
        });        
    }
    else {
        return "";
    }
}

【问题讨论】:

    标签: jqgrid jqgrid-formatter


    【解决方案1】:

    您似乎应该能够通过使用同步 AJAX 调用和闭包来使其工作:

    function myFormatter(cellvalue, options, rowObject) 
    {
        var value = "";
    
        if (rowObject[0] == something) {
            $.ajax({
                type: 'POST',
                url: '@Url.Action("MyAction", "MyController"),
                async: false,
                success: (function(result) {
                    var myObject = myResult[0];
                    value = myObject.myID;
                })
            });        
        }
    
        return value;
    }
    

    一般来说,使用同步 AJAX 调用是一种不好的做法,因为它们可能会在不确定的时间内阻塞 UI。如果您的网格中有很多行,这种情况可能会特别糟糕,因为每行都会进行一次 AJAX 调用。

    如果可以,更好的方法可能是提前检索 ID 并将它们缓存在页面本地,或者只是在服务器端进行格式化。与往常一样,请使用您的最佳判断。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      • 2011-10-10
      • 1970-01-01
      相关资源
      最近更新 更多