Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/10/2013, 13:02
rvaldenegro
 
Fecha de Ingreso: septiembre-2013
Mensajes: 9
Antigüedad: 11 años, 2 meses
Puntos: 0
Obtener datos JSON desde Webmethod llamado por jQuery

Estimados,

Soy nuevo en esto de .Net, en la empresa me han pedido que traspase un sistema hecho en PHP a .Net y en eso estoy. Hasta acá todo bien salvo que ahora no sé cómo retornar 2 valores por JSON desde un webmethod que llamo por jQuery. El código va mas o menos así


Código:
Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.Script.Serialization

...

<Serializable()>
    Public Class resultadoPlanTrabajo
        Public id As Integer = 0, result As String = ""
    End Class


    <System.Web.Services.WebMethod()>
    Public Shared Function GrabarPlanDeTrabajo( _
        ByVal pm_plan_inv_id As Integer _
        , ByVal pm_gru_int_id As Integer _
        , ByVal pm_per_id As Integer _
        , ByVal pm_conf_agno As Integer _
        , ByVal pm_plan_inv_nombre As String _
        , ByVal pm_plan_inv_proposito As String _
        , ByVal pm_plan_inv_responsable As String _
    ) As String
        Dim oRes As New resultadoPlanTrabajo

        If Not (HttpContext.Current.Session("per_id") Is Nothing) Then
            'verificacion de parametros
            Dim oFunc As New FuncionesGenerales
            Dim plan_inv_id As Integer = oFunc.VerificaID(pm_plan_inv_id)
            Dim gru_int_id As Integer = oFunc.VerificaID(pm_gru_int_id)
            Dim per_id As Integer = oFunc.VerificaID(pm_per_id)
            Dim conf_agno As Integer = oFunc.VerificaID(conf_agno)
            Dim nombre As String = oFunc.LimpiaCodigo(pm_plan_inv_nombre)
            Dim proposito As String = oFunc.LimpiaCodigo(pm_plan_inv_proposito)
            Dim responsable As String = oFunc.LimpiaCodigo(pm_plan_inv_responsable)
            
            Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("SIGGI").ConnectionString)
            Dim cmd As New SqlCommand("udsp_grabarPlanInvolucramiento", conn)
            cmd.CommandType = CommandType.StoredProcedure
            With cmd.Parameters
                .Add("@nuevo_id", SqlDbType.Int).Direction = ParameterDirection.Output
                .Add("@pm_id", SqlDbType.Int).Value = plan_inv_id.ToString()
                .Add("@pm_gru_int_id", SqlDbType.Int).Value = gru_int_id
                .Add("@pm_per_id", SqlDbType.Int).Value = per_id.ToString()
                .Add("@pm_conf_agno", SqlDbType.Int).Value = conf_agno.ToString()
                .Add("@pm_nombre", SqlDbType.VarChar, 150).Value = nombre.ToString()
                .Add("@pm_proposito", SqlDbType.Text).Value = proposito.ToString()
                .Add("@pm_responsable", SqlDbType.VarChar, 100).Value = responsable.ToString()
            End With
            conn.Open()
            cmd.ExecuteNonQuery()

            Dim nuevoId As Integer = cmd.Parameters("@nuevo_id").Value
            If (IsNumeric(nuevoId) And nuevoId > 0) Then
                oRes.id = nuevoId.ToString()
                oRes.result = "ok"
            Else
                oRes.id = "0"
                oRes.result = "error"
            End If
            conn.Close()
            conn.Dispose()
        Else
            oRes.id = "0"
            oRes.result = "error_sesion"
        End If

        Dim serializer As New JavaScriptSerializer
        Return serializer.Serialize(oRes)
    End Function

Esto visto desde el firebug me devuelve lo siguiente

Encabezados Respuesta: Content-Type application/json; charset=utf-8 (entre otros)

Respuesta: {"d":"{\"id\":18,\"result\":\"ok\"}"}

JSON: d "{"id":18,"result":"ok"}"


El código con el que llamo al webmethod es el siguiente:
Código:
strData = "{";
    strData += "'pm_plan_inv_id':'" + $("#plan_inv_id").val() + "'";
    strData += ", 'pm_gru_int_id': '" + $("#gru_int_id").val() + "'";
    strData += ", 'pm_per_id': '" + $("#per_id").val() + "'";
    strData += ", 'pm_conf_agno': '" + $("#conf_agno").val() + "'";
    strData += ", 'pm_plan_inv_nombre': '" + $("#nombre").val() + "'";
    strData += ", 'pm_plan_inv_proposito': '" + $("#proposito").val() + "'";
    strData += ", 'pm_plan_inv_responsable': '" + $("#responsable").val() + "'";
    strData += "}";
    $.ajax({
        type: "POST",
        url: "FichaPlanDeTrabajo.aspx/GrabarPlanDeTrabajo",
        data: strData,
        contentType: "application/json; charset=iso-8859-1",
        dataType: "json",
        success: function (resp) {
            if (resp.d.result == 'ok') {
                notificar(oContent, 'Proceso terminado correctamente');
                setTimeout('top.cerrarVentanaModal();', 2000);
            } else {
                mostrarError(oContent, "Ha ocurrido un error al intentar grabar el plan de trabajo");
            }
        },
        error: function (resp) {
            alert('ERROR: ' + resp.responseText)
        }
    });
el tema es que no sé cómo obtener el valor de id y result desde la respuesta JSON, he intentado de muchas formas pero no lo consigo

Quizás sea una tontería de principiante pero la verdad no doy con la solución y estoy pegado en esto, agradeceré sus aportes al respecto

Muchas gracias,

Rodrigo