Javascript jqgrid数据URL完成事件

Javascript jqgrid数据URL完成事件,javascript,jquery,jqgrid,Javascript,Jquery,Jqgrid,我正在使用jQuery获取零件号的供应商列表。 然后,我想在编辑表单出现后加载一些关于供应商/零件号组合的额外数据。问题在于获取供应商的dataurl方法(我在beforeInitData方法中调用该方法)在beforeShowForm方法执行之前没有完成。因此,当表单首次加载时,我没有要查找的供应商。有没有办法在dataUrl方法完成后运行函数以获取额外数据 我已经试过了,但我知道会有冲突,因为每个请求都会调用ajaxSelectOptions方法,有时我的请求会来自不同的地方,有不同的要求

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

我已经试过了,但我知道会有冲突,因为每个请求都会调用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
?你在哪里定义它

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

我建议您在
complete
回调中检查
this
的属性。jqGrid设置
context
选项(请参阅)
$.ajax
调用(与您已经找到的调用完全相同)。因此,您可以在
complete
回调中使用
this.elem
this.options
this.vl
this.vl
是编辑现有行时单元格中的值。通常是要选择的选项的名称
this.options
具有可使用的重要属性树:
this.options.dataUrl
this.options.id
this.options.name
。在表单编辑的情况下,值
this.options.id
this.options.name
相同。在内联编辑的情况下,
此.options.id
将有rowid和
\uu
作为前缀。它使您能够在
complete
回调中执行不同的代码,以进行使用
dataUrl
的不同选择

还有一句话。在大多数情况下,您可以从
beforeInitData
中删除对
setColProp
的调用,并使用和中建议的方法:


您可以只使用
editoptions:{dataUrl:“getSuppliersForPart.php”}
URL将附加
part
id
参数(参见上面的代码)。您可以使用
getRowData
而不是
id
从其他列获取基于当前选定行的rowid的内容,例如。

您没有发布您使用的jqGrid的定义。执行上述代码的上下文也不是很清楚。您以前是否从当前选定的行中获取
rowData
?你在哪里定义它

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

我建议您在
complete
回调中检查
this
的属性。jqGrid设置
context
选项(请参阅)
$.ajax
调用(与您已经找到的调用完全相同)。因此,您可以在
complete
回调中使用
this.elem
this.options
this.vl
this.vl
是编辑现有行时单元格中的值。通常是要选择的选项的名称
this.options
具有可使用的重要属性树:
this.options.dataUrl
this.options.id
this.options.name
。在表单编辑的情况下,值
this.options.id
this.options.name
相同。在内联编辑的情况下,
此.options.id
将有rowid和
\uu
作为前缀。它使您能够在
complete
回调中执行不同的代码,以进行使用
dataUrl
的不同选择

还有一句话。在大多数情况下,您可以从
beforeInitData
中删除对
setColProp
的调用,并使用和中建议的方法:


您可以只使用
editoptions:{dataUrl:“getSuppliersForPart.php”}
URL将附加
part
id
参数(参见上面的代码)。您可以使用
getRowData
而不是
id
从其他列获取基于当前选定行的rowid的内容,例如。

感谢您提供的详细答案。我不知道我可以用“这个”。谢谢你详细的回答。我不知道我可以用“这个”。
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;
        ...
    }
}