2010-12-08 3 views
1

Я пытаюсь заполнить форму поиска jqGrid с помощью элемента SELECT. В 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

+0

Какое значение передается «response»? Можете ли вы показать нам, как он выглядит в вашем отладчике? – 2010-12-08 16:53:23

+0

это говорит `[object XMLhttpRequest]` – Lorenzo 2010-12-08 16:59:37

ответ

1

С (в соответствии с комментарием выше) вы получаете XMLHttpRequest объект, необходимо разобрать его текст ответа.

var parsed = $.parseJSON(response.responseText); 

$.each(parsed, function(... 

Или изменить код, передающий ответ, чтобы передать только текст ответа или проанализированный результат.

+0

@patrick_dw: отлично! Большое спасибо! – Lorenzo 2010-12-08 17:23:42

0

вы разбор этого объекта JSON, так что вы можете прочитать его в качестве фактических JS объекта собственно?

Поскольку вы возвращаете массив объектов JSON, вам, возможно, придется анализировать каждый объект индивидуально по мере повтора.

0

Я попытался использовать $(this) внутри каждой функции. Хотя это выглядит правильно, что-то может быть подозрительным с результатом. Альтернативно вы можете использовать for (var d in data) (я думаю) для итерации над JSON.

1

реакция это просто строка она должна быть проанализирована, используя нечто вроде json2.js

var data = JSON.parse(response); 
+0

Или используйте метод jQuery [parseJSON] (http://api.jquery.com/jQuery.parseJSON/). – jball 2010-12-08 17:09:26

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>"; 
}