我正在使用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); }
});
}
答案 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;
}
或重新设计你的功能。