jqgrid dataurl完成事件

我正在使用jQuery获取部件号的供应商列表。 然后,我想在编辑表单出现后加载一些关于供应商/部件号组合的额外数据。 问题是在beforeShowForm方法执行之前,dataurl方法(我在beforeInitData方法中调用)来获取供应商没有完成。 因此,当表单首次加载时,我没有供应商查找。 有没有办法在dataUrl方法完成后运行该函数来获取额外的数据?

我试过JQGrid editoptions dataurl不使用ajax get? 并得到它,但我知道会有冲突因为ajaxSelectOptions方法被调用每个请求,有时我的请求将来自不同的地方有不同的要求。

这是我用于网格的代码:

jQuery("#receiptPartsTable").jqGrid('editGridRow',"new", { height:400, width:800, reloadAfterSubmit:false, recreateForm: true, beforeInitData: function(form) { var selectedPart = rowData.part; var selectedPartQty = rowData.qty; //Getting list of suppliers $("#receiptPartsTable").jqGrid('setColProp', 'supplier', { editoptions:{dataUrl:'getSuppliersForPart.php?part=' + rowData.part} }); }, beforeShowForm: function(form) { var selectedPart = rowData.part; var selectedPartQty = rowData.qty; $('#part').val(selectedPart); $('#qty').val(selectedPartQty); //$('#supplier').val() is not set yet; var supplier = $('#supplier').val(); //This method is getting called before there is a supplier getPartDetails(rowData.part, supplier); //Set up onChange listener. After selecting a supplier, get the part details $('#supplier').change(function() { var supplier = $('#supplier').val(); getPartDetails(selectedPart, supplier); }); } 

你没有找到你使用的jqGrid的定义。 执行上述代码的上下文也不太清楚。 你从当前选定的行之前获得rowData吗? 你在哪里定义它?

尽管如此,我认为你走的是正确的方向,并且你已找到解决问题的正确方法。 使用complete回调ajaxSelectOptions可能是您可以使用的唯一方法。 你写了一些“冲突”,但没有发布更多细节。

我建议你检查complete回调内部的属性。 jqGrid设置$.ajax调用的context选项(参见行 )(与您自己已经找到的答案完全相同)。 所以你可以在complete回调中使用this.elemthis.optionsthis.vl this.vl是编辑现有行时来自单元格的值。 通常,它是将被选中的选项的名称。 this.options具有树重要属性,您可以使用: this.options.dataUrlthis.options.idthis.options.name 。 在表单编辑的情况下, this.options.idthis.options.name的值相同。 this.options.id联编辑的情况下, this.options.id将具有rowid和_ ad前缀。 它使您可以在complete回调内执行不同的代码,以便在使用dataUrl进行不同的选择。

再说一遍。 在大多数情况下,您可以从beforeInitData删除setColProp调用,并使用答案中建议的方法和另一个 :

 ajaxSelectOptions: { data: { id: function () { return $("#receiptPartsTable").getGridParam('selrow'); }, part: function () { return rowData.part; } }, complete: function (jqXHR, textStatus) { var columName = this.options.name, response = jqXHR.responseText; ... } } 

您可以只使用editoptions: {dataUrl: "getSuppliersForPart.php"}该URL将附加partid参数(请参阅上面的代码)。 例如,您可以使用getRowData来获取基于当前所选行的rowid的其他列的内容,而不是id