jqgrid格式化程序可以调用ajax/json方法吗?
我正在jqGrid中的一列上使用格式化程序。格式化程序使用一些逻辑来决定显示什么,在某些情况下,它调用ajax方法。我已经在Fiddler中验证了ajax调用返回的数据是否正确。我还在Chrome除错工具中验证了我的变量设置是否正确。但是,该序列完全是无序的,因此我列中的返回值是“未定义的”。我可以在调试工具的时间线中看到,我的getJSON调用是在jqgrid已经加载之后被调用的 我先试了一下:jqgrid格式化程序可以调用ajax/json方法吗?,jqgrid,jqgrid-formatter,Jqgrid,Jqgrid Formatter,我正在jqGrid中的一列上使用格式化程序。格式化程序使用一些逻辑来决定显示什么,在某些情况下,它调用ajax方法。我已经在Fiddler中验证了ajax调用返回的数据是否正确。我还在Chrome除错工具中验证了我的变量设置是否正确。但是,该序列完全是无序的,因此我列中的返回值是“未定义的”。我可以在调试工具的时间线中看到,我的getJSON调用是在jqgrid已经加载之后被调用的 我先试了一下: function myFormatter(cellvalue, options, rowObjec
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 "";
}
}
我还尝试使用ajax调用w/async=false,并尝试了不同的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 "";
}
}
似乎您应该能够通过使用同步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并在页面上本地缓存它们,或者只在服务器端进行格式化。一如既往,运用你最好的判断