【问题标题】:Problem with $.each in jqueryjquery中$ .each的问题
【发布时间】:2011-05-22 08:37:59
【问题描述】:

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

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

【问题讨论】:

  • 传入的response的值是多少?你能告诉我们它在你的调试器中是什么样子吗?
  • 上面写着[object XMLhttpRequest]

标签: jquery jqgrid


【解决方案1】:

由于(根据您上面的评论)您获得了 XMLHttpRequest 对象,因此您需要解析其响应文本。

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

$.each( parsed, function(...

或者修改传递响应的代码,只传递响应文本或解析结果。

【讨论】:

    【解决方案2】:

    response 只是一个字符串,需要使用 json2.js 之类的东西进行解析

    var data = JSON.parse(response);
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 比很多。这也将起作用。问题在于使用@patrick_dw 所指示的parseJSON(response.responseText);,甚至出现在您的答案中。修改后,我的代码中的$.each 块工作正常并且更紧凑。非常感谢!
      • @Lorenzo:欢迎您!最重要的是你的问题得到了解决。说实话,我更喜欢写 jqgrid 的答案,而不是纯粹的 jQuery/jQuery UI 问题,因为我写/输入优先级很慢。 :-)
      • 我知道你的意思。对我来说,你是 jqGrid 的最大参考!! :)
      【解决方案4】:

      您是否正在解析这个 JSON 对象,以便您可以将其作为实际的 JS 对象正确读取?

      由于您返回的是 JSON 对象数组,因此您可能必须在迭代时单独解析每个对象。

      【讨论】:

        【解决方案5】:

        我会尝试在每个函数中使用$(this)。虽然看起来正确,但结果可能有些可疑。或者,您可以使用for (var d in data)(我认为)来迭代 JSON。

        【讨论】:

          猜你喜欢
          • 2011-11-26
          • 2011-01-07
          • 2012-02-06
          • 2013-09-28
          • 1970-01-01
          • 1970-01-01
          • 2016-05-19
          • 2012-02-13
          相关资源
          最近更新 更多