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:
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 consigostrData = "{"; 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) } });
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