2011-05-24 21 views
23

Funciona bien en Chrome, Firefox e IE8. Pero aparece un error en IE7. Aquí está mi evento jquery onchange.JSON no está definido en 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>'); 
       }); 
      } 
     }); 
    }); 

controlador

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

Respuesta

28

El problema es que the JSON object is not available in IE 7. Querrá incluir JSON2.j s en su página para IE < 8 usuarios.

+0

intenté . El evento onchange no se dispara. – bladerunner

+1

En primer lugar, supongo que * no * en realidad se está conectando a JSON2 ;-) En segundo lugar, ¿el * evento * no se está disparando en absoluto? (¿Y esto solo en IE7?) –

+0

Copié el script que estaba en el archivo json2.js, lo agregué a mi proyecto y mencioné ese archivo en mi página maestra. Eso es todo lo que hice. bladerunner

1

Si el navegador no implementa el objeto JSON, siempre se puede utilizar para proporcionar a third-party library por usted. Si no recuerdo mal, esta implementación en particular se usa ampliamente y difiere en el navegador, por lo que solo tiene que colocarla, no es necesario ajustarla.

+0

Hola Kyte, así que copié json2.js en mi proyecto y hice referencia a ese archivo en el encabezado de mi secuencia de comandos. El menú desplegable no funciona en absoluto. – bladerunner

+2

@bladerunner: Eso es porque [IE7 no maneja el cambio() correctamente] (http://stackoverflow.com/questions/1637503/jquery-change-event-on-select-not-firing-in-ie). – Kyte

0

No debería

data: { "nationId": nationId }, 

sólo el trabajo?

+0

Intenté hacer esto pero el cambio no se dispara. – bladerunner

+0

¿Y si agrega presupuestos? – ZippyV

+0

No, no funciona incluso con las comillas .. – 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>'); 
      }); 
     } 
    }); 
});