Estoy recien empezando a trabajar con jquery + json + Ajax.
EL punto es que he bajado decenas de ejemplo, pero aun no logro llegar al punto de mostrar información del servidor en en javascript. No me da error ni nada, solo que no entra al ciclo for. Si imprime lo que trae devuelta con un alert, dice [object Object]. Si imprimo el largo, me dise "Undefined"... etc...
Esto es lo que tengo, (lo baje de otra pagina)
ASPX
Código:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" EnableEventValidation="false" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>h@nz ...el Geek - JQuery y AJAX</title> <script type="text/javascript" language="javascript" src="Scripts/jquery1-2-6-min.js"> </script> <script type="text/javascript" language="javascript"> function listarCursos(idCarrera){ $.ajax({ type:"POST", dataType: "json", contentType: "application/json; charset=utf-8", url:"Default.aspx/DevolverListas", data:"{ Codigo: '" + idCarrera + "' }", success: mostrarCursos, error: function(msg){ alert("Se ha producido un error en la llamada AJAX."); } }); } function mostrarCursos(html){ alert(html.length); $('#<%=ddlCursos.ClientID %>').html(html); } function SeleccionarCurso(){ var strCurso = $('#<%=ddlCursos.ClientID %> :selected').text(); $('#<%=lblCurso.ClientID %>').text(strCurso); } </script> </head> <body> <form id="form1" runat="server"> <asp:scriptmanager ID="Scriptmanager1" runat="server" /> <div> Carreras: <asp:DropDownList ID="ddlCarreras" runat="server" AppendDataBoundItems="True" onChange="listarCursos(this.value);" /> <br /><br /> Cursos: <asp:DropDownList ID="ddlCursos" runat="server" onChange="SeleccionarCurso();" /> <br /><br /> Esta seleccionando el curso: <asp:Label ID="lblCurso" runat="server" ForeColor="DarkBlue" /> </div> </form> </body> </html>
CODEBEHIND
Código:
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Text; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { ddlCarreras.Items.Clear(); ddlCarreras.Items.Add(new ListItem("--- Seleccione ---", "0")); ddlCarreras.Items.Add(new ListItem("Computación e Informática", "1")); ddlCarreras.Items.Add(new ListItem("Administración de Empresas", "2")); } } [System.Web.Services.WebMethod()] public static string DevolverListas(string Codigo) { string strId = Codigo; StringBuilder sb = new StringBuilder(); #region Código para devolver los Cursos según la Carrera sb.Append("<option value='0'>--- Seleccione ---"); if (strId == "1") { sb.Append("<option value='1-1'>Sistemas Operativos</option>"); sb.Append("<option value='1-2'>Programación Orientada a Objetos</option>"); } else { sb.Append("<option value='2-1'>Administración de Recursos Humanos</option>"); sb.Append("<option value='2-2'>Logística Avanzada</option>"); } #endregion return sb.ToString(); } }
... Mis conocimientos en paginas y c# seria nivel medio - avanzado. Segun el seguimieno que hice, la llama al webmethod estaria correcta, llega ahi y devueve el string. Pero cuando se ejecuta el "success" en el javascript, es que no llega nada. Como decia, he probado varias formas, serializando a json con una funcion especial, solo devolver texto plano, devolver html, etc.. pero no me resulta, aunque no genera error, pero no se mete al ciclo for.. nunca he podido hacer el ciclo completo con jquery y ajax.... ojala se haya entendido y me puedan ayudar diciendo que me falta o que me falta configurar si fuese es.. Gracias de antemano...