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