cómo llamar al método vb.net desde ajax, envío una matriz como parámetro en ajax y no funciona, este es el código ajax y javascript
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script type="text/javascript"> $("#Button1").click(function () { var Years = document.getElementById("Options").querySelectorAll(".selected"); $.ajax({ type: "POST", url: "NewScenarioProfilePage.aspx/CalculateSum", data: "{'yearvalue ':'" + Years + "'}", contentType: "application/json; charset=utf-8", dataType: "json", success: OnSuccess, failure: function (response) { ' this alert didn't show alert(response.d); } }); });y este es el método vb Ps este valor de año puede ser una matriz si tiene más de 2 valores o será una variable entera si es un valor
<System.Web.Services.WebMethod()> Public Shared Function CalculateSum(ByVal yearvalue as Integer) As String MsgBox("calculate sum") Dim Result As Integer = yearvalue Return Result.ToString() End Functiony el msgbox no dispara. No sé cuál es el problema. este es el error en la inspección cuando hago clic en el botón
jquery.min.js:4 POST https://localhost:44351/NewScenarioProfilePage.aspx/CalculateSum 401 send @ jquery.min.js:4 ajax @ jquery.min.js:4 (anonymous) @ NewScenarioProfilePage:477 dispatch @ jquery.min.js:3 r.handle @ jquery.min.js:3Recibiste un código de estado 401 como respuesta. Entonces, probablemente te falte el mecanismo de autenticación.
Hum, creo que debes eliminar ese msgbox del lado del servidor; lo arruinará EN GRANDE, ya que las llamadas ajax son asíncronas.
Prueba este ejemplo:
Coloquemos dos cuadros de texto, un botón, y tomemos el valor del primer cuadro de texto, ejecútelo a través de la función (digamos 2 veces por diversión).
Entonces tenemos esto para el código del servidor:
<System.Web.Services.WebMethod()> Public Shared Function CalculateSum(ByVal yearvalue As Integer) As String Debug.Print("cal sum run!!") Dim Result As Integer = yearvalue * 2 Return Result.ToString() End Function¿Y para el lado del cliente? no solo tengamos el código js como "sentado" allí, llamemos a una rutina y hagamos la publicación.
Entonces, agreguemos un botón asp.net estándar, pero TENGA EN CUENTA cómo SOLAMENTE llamamos al código del lado del cliente con ese botón (onClientClick). y usamos return false para que el botón no se devuelva.
<div> Enter year: <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <br /> <asp:Button ID="Button1" runat="server" Text="Test Ajax call" OnClientClick="mytest();return false"/> <br /> Result ajax from server: <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> </div> <script> function mytest() { myyear = $('#TextBox1').val() $.ajax({ type: "POST", url: "AjaxTestFun.aspx/CalculateSum", data: JSON.stringify({ yearvalue: myyear }), contentType: "application/json; charset=utf-8", dataType: "json", success: function (rData) { // put results send back into TextBox2 $('#TextBox2').val("Result from server = " + rData.d) }, failure: function (rData) { alert("error " + rData.d); } }); } </script>Entonces, la salida ahora se ve así:
Entonces, usé un debug.print. Use eso o el registro de la consola, ya que cuando comienza a usar llamadas ajax, entonces un msgbox del lado del servidor a menudo puede lastimarlo.
Y si la página web actual funciona bien, entonces lanzar un método web también funcionará (NO es un problema de autenticación).
También usé JSON.stringify. "Asume" que el primer valor es texto, y el segundo valor puede ser una variable como la que usé, como mymyear, o podría usar '12335' entre comillas.
Así que stringify REALMENTE ayuda a la pobreza y el sufrimiento del mundo al no tener que tratar de concatenar un montón de variables y un ENORME lío de comillas simples o dobles.