2013-04-02 60 views
0

我不知道怎么解释,下面的代码工作Jquery对象数组?

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属性。

回答

3

它不起作用,因为你的AJAX调用是异步,所以当函数返回时cols为空。

您需要推迟所有后续操作,直到success:调用完成。更重要的是,除去success:error:处理程序和使用明确的延迟对象,即:

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数据,和其他处理错误。

+0

+1,打我吧,但是它必须是十亿个问题的复制品吗? – adeneo

+2

这个问题可能是dup,答案不是;-) – Alnitak