0

我不知道如何解释,以下代码有效

function DrawIrregularChartGrid() {
    $('#data_grid').datagrid({
        columns: [[{"field":"MeterID","title":"MeterID"},{"field":"ADateTime","title":"ADateTime"}]]
    });
}

但这一个不起作用,没有错误消息,网格正在加载但列名称为空。

function DrawIrregularChartGrid() {
    $('#data_grid').datagrid({
        columns: [GetGridColumnNames()]
    });
}

GetGridColumnNames()

返回

[{"field":"MeterID","title":"MeterID"},{"field":"ADateTime","title":"ADateTime"}]

GetGridColumnNames 函数

function GetGridColumnNames() {

var cols = [];
var IrregularChartParams = InitializeChartParams();

// parametreleri json stringe cevir...
var chartParams = JSON.stringify(IrregularChartParams);

$.ajax({
    type: "POST",
    url: app_base_url + 'Graph/GetGridColumnNames',
    contentType: 'application/json; charset=utf-8',
    data: chartParams,
    success: function (result) {
        $.each(result, function (index, value) {
            cols.push(result);
        });
    },
    error: function (xhr, ajaxOptions, thrownError) {
        alert(xhr.status);
        alert(thrownError);
    },
    beforeSend: function () {

    },
    complete: function () {
    }
});
return cols;
}

dataGrid 列属性类型是对象数组。如何将GetGridColumnNames返回对象分配给columns属性。

4

1 回答 1

3

它不起作用,因为您的 AJAX 调用是异步的,因此cols函数返回时为空。

您需要推迟所有后续操作,直到success:调用完成。更好的是,删除success:anderror:处理程序并使用显式延迟对象,即:

function GetGridColumnNames() {
    return $.ajax(...).then(
        function(result) {
            // pre-process result and _return_ the desired array
            ...
            return cols;
        },
        function(xhr, ajaxOptions, thrownError) {
            // error handling
        },
    }
}

GetGridColumnNames().done(function(cols) {
    // use column names here
});

.then调用被传递了两个回调 - 一个用于预处理返回的 JSON 数据,另一个用于处理错误。

于 2013-04-02T15:18:06.050 回答