2012-02-28 107 views
0

我正在使用jqGrid,最新版本,并且当我应用自定义函数的编辑规则并执行ajax时,它总是返回“自定义函数应始终返回数组”。我认为这是一个时间问题,所以我将ajax设置为false,但仍然存在问题。那里的任何人都有一个自定义函数,执行正常工作的ajax调用。感谢任何帮助。谢谢。jqGrid使用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}} 
    .... 

我有以下的被称为

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); } 
    }); 
} 

回答

4

javascript函数你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; 
} 

或重新设计您的功能。

+0

感谢您的快速响应。 – 2012-02-28 21:48:04

+1

@TwoSeeds:您应该使用自己的权利投票给出有用的答案,就像我自己做的一样。您有权每天投票约30个问题或答案**(请参阅[此处](http://meta.stackexchange.com/a/5213/147495))。如果您使用正确的方式,您将帮助该页面的其他访问者,并且您还将帮助搜索引擎。 – Oleg 2012-02-28 22:01:50

+0

我在第二个'result = ['(它只是'result [')'修正了小的打字错误。用'ajax:false'你的意思可能是'cache:false'? – Oleg 2012-02-28 22:27:40