jquery中$ .each的问题

时间:2010-12-08 16:50:32

标签: jquery jqgrid

我正在尝试使用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"}]

但是我用于每个函数的代码我得到以下错误

alt text

5 个答案:

答案 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。