我正在尝试使用SELECT元素填充jqGrid搜索表单。在感兴趣的列的colModel中我有
searchoptions: {
dataUrl: '<%: Url.Content("~/Contact/GetCustomers") %>',
buildSelect: function (response) {
var theSelect = "<select>";
$.each(response, function (i, data) {
theSelect += '<option value="' + data.Value + '">' + data.Text + '</option';
});
theSelect += "</select>";
},
sopt: ['eq', 'ne']
}
远程方法GetCustomers返回格式为
的json结果[{"Selected":false,"Text":"David Gilmour","Value":"10"},
{"Selected":false,"Text":"Eric Clapton","Value":"26961"},
{"Selected":false,"Text":"Joan Baetz","Value":"26972"}]
但是我用于每个函数的代码我得到以下错误
答案 0 :(得分:1)
响应只是一个需要使用json2.js
之类的东西来解析的字符串var data = JSON.parse(response);
答案 1 :(得分:1)
由于(根据您上面的评论)您获得了XMLHttpRequest
对象,因此您需要解析其响应文本。
var parsed = $.parseJSON( response.responseText );
$.each( parsed, function(...
或者修改传递响应的代码以仅传递响应文本或解析结果。
答案 2 :(得分:1)
看看the close answer。在我看来,你应该稍微修改一下代码:
buildSelect: function(data) {
var response = jQuery.parseJSON(data.responseText);
var s = '<select>';
if (response && response.length) {
for (var i = 0, l=response.length; i<l ; i++) {
var ri = response[i];
s += '<option value="' + ri.Value +
(ri.Selected ? '" selected="selected">': '">') +
ri.Text + '</option>';
}
}
return s + "</select>";
}
答案 3 :(得分:0)
您是否正在解析此JSON对象,以便可以将其作为实际的JS对象进行读取?
由于您返回的是JSON对象数组,因此在迭代时可能需要单独解析每个对象。
答案 4 :(得分:0)
我会尝试在每个函数中使用$(this)
。虽然它看起来很正确,结果可能会有些腥。另外,您可以使用for (var d in data)
(我认为)来迭代JSON。