【发布时间】:2014-07-25 21:43:19
【问题描述】:
我有一个jqGrid 控件,其中包含一个下拉列表字段。列表中的项目来自服务器端使用ajax 的方法,但我不确定如何构造返回的json 以使其与网格兼容。我查看了this question,根据答案,网格似乎需要以下下拉格式:
[value] : [display text]
我对 JavaScript 比较陌生,不确定这是什么类型的数据(我假设它是键值对?)所以我不知道如何从我的 json 对象创建这种类型的数组.这是我尝试过的:
function populateTable(){
$.ajax({
type: "POST",
url: "MyHttpHandler.ashx",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {
var jsonObject = jQuery.parseJSON(result.d);
var dropdpwnvalues = new[];
for(var i = 0; i< jsonObject.length; i++){
dropdpwnvalues.push({ jsonObject[i].id : jsonObject[i].name });
}
// The rest of the function
);
}
dropdpwnvalues 变量是绑定到网格的变量。请注意,jsonObject 上确实有 id 和 name,但是这个语法
dropdpwnvalues.push({ jsonObject[i].id : jsonObject[i].name });
显然是不正确的。有什么想法可以从这个 json 对象中创建列表吗?
【问题讨论】:
-
dropdpwnvalues.push({ value: jsonObject[i].id , displayText: jsonObject[i].name }); ?
-
我想您在当前的代码中犯了很多错误。例如,
var jsonObject = jQuery.parseJSON(result.d);行显示您将返回的 Object 数据不需要额外转换为String。取而代之的是,您应该从"MyHttpHandler.ashx"方法中返回 Object。 .NET Framework 将自动 序列化为 JSON。$.ajax将数据从 JSON 反序列化为对象,result.d将是您可以直接使用的对象。不需要显式调用jQuery.parseJSON。 -
您发布的有关您创建的 jqGrid 的信息太少,所以我不得不猜测。您可能会遇到其他问题,因为您使用填充网格的数据格式意味着您在用于填充网格的数据中使用了 id。这意味着您需要使用
formatter: "select"将数据显示为文本(名称而不是ID)。重要的是您必须设置editoptions.value或formatoptions.value之前 从服务器返回以填充网格的数据将由jqGrid 处理。详情请见the answer。
标签: javascript jquery asp.net json jqgrid