2011-05-24 29 views
23

Nó hoạt động tốt trong chrome, firefox và IE8. Nhưng đưa ra một lỗi trên IE7. Đây là sự kiện onchange jquery của tôi.JSON không được xác định trong IE7

$('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>'); 
       }); 
      } 
     }); 
    }); 

khiển

[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); 
    } 

Trả lời

28

Vấn đề là the JSON object is not available in IE 7. Bạn sẽ muốn bao gồm JSON2.j s trên trang của mình cho người dùng IE < 8.

+0

tôi đã thử . Sự kiện onchange không bị sa thải. – bladerunner

+1

Đầu tiên, tôi giả sử bạn * không * thực sự hotlinking với JSON2 ;-) Thứ hai, là sự kiện * không kích hoạt? (Và điều này chỉ có trong IE7?) –

+0

Tôi đã sao chép tập lệnh có trong tệp json2.js, đã thêm vào dự án của tôi và tham chiếu tệp đó trên trang cái của tôi. Đó là tất cả những gì tôi đã làm. bladerunner

1

Nếu trình duyệt không thực hiện các đối tượng JSON, bạn luôn có thể sử dụng a third-party library để cung cấp nó cho bạn. Nếu tôi nhớ lại chính xác, việc triển khai cụ thể này được sử dụng rộng rãi và ngăn chặn trình duyệt, vì vậy bạn chỉ cần thả nó vào, không cần phải chỉnh sửa.

+0

Hi Kyte, Vì vậy, tôi đã sao chép json2.js trong dự án của tôi và tham chiếu tệp đó trong tiêu đề tập lệnh của tôi. Trình đơn thả xuống không hoạt động chút nào. – bladerunner

+2

@bladerunner: Đó là vì [IE7 không xử lý thay đổi() đúng cách] (http://stackoverflow.com/questions/1637503/jquery-change-event-on-select-not-firing-in-ie). – Kyte

0

nên không

data: { "nationId": nationId }, 

chỉ làm việc?

+0

Tôi đã thử làm điều này nhưng onchange không bị sa thải. – bladerunner

+0

Và nếu bạn thêm dấu ngoặc kép? – ZippyV

+0

Không, nó không hoạt động ngay cả với các dấu ngoặc kép .. – bladerunner

0
$('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>'); 
      }); 
     } 
    }); 
}); 
Các vấn đề liên quan