【问题标题】:JSON is undefined in IE7JSON 在 IE7 中未定义
【发布时间】:2011-05-24 18:18:50
【问题描述】:

它在 chrome、firefox 和 IE8 中运行良好。但是在IE7上出现错误。这是我的 jquery onchange 事件。

$('select#NationId').change(function () {
        var nationId = $(this).val();
        $.ajax({
            url: 'LoadAreas',
            type: 'POST',
            data: JSON.stringify({ nationId: nationId }),
            dataType: 'json',
            contentType: 'application/json',
            success: function (data) {
                $('select#AreaId').get(0).options.length = 0;
                $('select#AreaId').append('<option value="0">Select All</option>');
                $.each(data, function (val, Areas) {
                    $('select#AreaId').append('<option value="' + Areas.Id + '">' + Areas.Name + '</option>');
                });
            }
        });
    });

控制器

[HttpPost]
    public ActionResult LoadAreas(int nationId)
    {
        var _Areas = (from c in SessionHandler.CurrentContext.ChannelGroups
                      join cgt in SessionHandler.CurrentContext.ChannelGroupTypes on c.ChannelGroupTypeId equals cgt.ChannelGroupTypeId
                      where cgt.Name == "Area" && c.ParentChannelGroupId == nationId
                      select new AreaName() { Id = c.ChannelGroupId, Name = c.Name }).OrderBy(m => m.Name);

        if (_Areas == null)
            return Json(null);
        List<AreaName> managers = (List<AreaName>)_Areas.ToList();

        return Json(managers);
    }

【问题讨论】:

    标签: asp.net asp.net-mvc-3 internet-explorer-7


    【解决方案1】:

    问题是 the JSON object is not available in IE 7. 您需要在您的页面上为 IE JSON2.js。

    【讨论】:

    • 我试过 。 onchange 事件不会被触发。
    • 首先,我假设您实际上 没有 热链接到 JSON2 ;-) 其次,事件 根本没有触发吗? (这仅在 IE7 中吗?)
    • 我复制了 json2.js 文件中的脚本,将其添加到我的项目中,并在我的母版页上引用了该文件。这就是我所做的一切。
    • @bladerunner - 如果你在你的.change 处理程序中alert(nationId);,没有任何警报?或者你得到错误? (如果是这样,有什么错误?)
    • 对不起,我离开了 PTO。这是固定的。复制 json2.js 文件并将其包含在我的母版页中。在 IE7 中测试并且 onchange 事件开始工作。
    【解决方案2】:

    如果浏览器没有实现 JSON 对象,您可以随时使用a third-party library 为您提供它。如果我没记错的话,这个特定的实现被广泛使用并且依赖于浏览器,所以你只需要把它放进去,不需要调整。

    【讨论】:

    • 嗨 Kyte,所以我在我的项目中复制了 json2.js 并在我的脚本头中引用了该文件。下拉菜单根本不起作用。
    • @bladerunner:那是因为IE7 doesn't handle change() properly
    【解决方案3】:

    不应该

    data: { "nationId": nationId },
    

    只是工作?

    【讨论】:

      【解决方案4】:
      $('select#NationId').change(function () {
          var nationId = $(this).val();
          var data = '{"nationId": "' + nationId + '"}';
      
          $.ajax({
              url: 'LoadAreas',
              type: 'POST',
              data: data ,
              dataType: 'json',
              contentType: 'application/json',
              success: function (data) {
                  $('select#AreaId').get(0).options.length = 0;
                  $('select#AreaId').append('<option value="0">Select All</option>');
                  $.each(data, function (val, Areas) {
                      $('select#AreaId').append('<option value="' + Areas.Id + '">' + Areas.Name + '</option>');
                  });
              }
          });
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-24
        • 1970-01-01
        • 1970-01-01
        • 2014-04-12
        相关资源
        最近更新 更多