0

Vraiment apprécier toute aide que quelqu'un pourrait être en mesure d'offrir!L'appel de service Web échoue de JQuery

J'ai essayé de configurer un appel JQuery Ajax à un service Web, et le peu de débogage que j'ai fait jusqu'à présent montre que le service web retournera les paramètres et du côté du client j'ai utilisé l'alerte fonction pour montrer que les données vont à la chaîne de données, mais alors je l'ai changé pour ne pas prendre de paramètres du tout et ça ne fonctionne toujours pas, à savoir; rien ne se passe, rien ne bouge. Je me demande s'il pourrait y avoir un type d'erreur de syntaxe sur les entrées 'url:' ou 'data:' puisque je les ai vues de diverses manières en regardant des exemples.

Configuration du projet à l'aide de la page Web AJAX.

Comme je l'ai déjà dit - AIDE !!

La page

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CS.aspx.cs" Inherits="_Default" %> 
<%@ Import Namespace = "System.Web.Services" %> 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Check User Name Page</title> 
    <script src="scripts/jquery-1.3.2.min.js" type="text/javascript"></script> 
<script type = "text/javascript"> 

//function ShowAvailability() { 

    $(document).ready(function() { 
    $("#btnCheck").click(function(event){ 
    //alert(" '{" + userName: "' + $('#txtUserName').val() + "'}") 
    // alert('{userName: "musser"}') 
    $.ajax({ 
     type: "POST", 
     url: "WebService.asmx/CheckUserName", 
     data: "{}", 

    // data: '{userName: "musser"}', 
     //data: '{userName: "' + $('#txtUserName').val() + "'}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: OnSuccess, 
     failure: function(response) { 
      alert(response); 

      } 
     }); 
    }); 
}); 
//} 


function OnSuccess(response) { 
    var mesg = $("#mesg")[0]; 

    switch (response) { 
     case "true": 
      mesg.style.color = "green"; 
      mesg.innerHTML = "Available"; 
      break; 
     case "false": 
      mesg.style.color = "red"; 
      mesg.innerHTML = "Not Available"; 
      break; 
     case "error": 
      mesg.style.color = "red"; 
      mesg.innerHTML = "Error occured"; 
      break;      
    } 
} 
function OnChange(txt) { 
    $("#mesg")[0].innerHTML = ""; 
} 


</script> 
</head> 
<body> 
    <form id="form1" runat="server"> 

     <div> 
     UserName : 
    <asp:Textbox ID="txtUserName" runat="server" ></asp:Textbox> 
    <input id="btnCheck" type="button" value="Show Availability"/> 
    <br /> 
    <span id = "mesg"></span> 
     </div> 
    </form> 
</body> 
</html> 

service web

using System; 
using System.Web; 
using System.Collections; 
using System.Web.Services; 
using System.Web.Services.Protocols; 
using System.Data.SqlClient; 
using System.Configuration; 
using System.Data; 

using System.Web.Script.Services; 
using System.Web.Script.Serialization; 
using System.Collections.Generic; 






/// <summary> 
/// Summary description for WebService 
/// </summary> 
[WebService(Namespace = "http://localhost:1252/ChkUserNamesSite/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.Web.Script.Services.ScriptService()] 

public class WebService : System.Web.Services.WebService 
{ 
    public WebService() 
    { 

     //Uncomment the following line if using designed components 
     //InitializeComponent(); 
    } 

    [WebMethod] 
    [ScriptMethod(ResponseFormat= ResponseFormat.Json)] 

    public static string CheckUserName(string userName) 
    { 
     string returnValue = string.Empty; 
     try 
     { 
      string consString = ConfigurationManager.ConnectionStrings["conString"].ConnectionString; 
      SqlConnection conn = new SqlConnection(consString); 
      SqlCommand cmd = new SqlCommand("spx_CheckUserAvailability", conn); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.AddWithValue("@UserName", userName.Trim()); 
      conn.Open(); 
      returnValue = cmd.ExecuteScalar().ToString(); 
      conn.Close(); 
     } 
     catch 
     { 
      //returnValue = "error"; 
      returnValue = userName; 

     } 
     return returnValue; 

La configuration Web

<?xml version="1.0"?> 
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> 
<configSections> 
    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"> 
    <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"> 
    <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/> 
    <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"> 
    <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="Everywhere"/> 
    <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/> 
    <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/> 
    </sectionGroup> 
    </sectionGroup> 
    </sectionGroup> 
</configSections> 
    <connectionStrings> 
    <add name ="conString" connectionString ="Server=Pandora;Database=dbUsers;Integrated Security=true"/> 
    </connectionStrings > 
<system.web> 

    <pages> 
    <controls> 
    <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 
    </controls> 
    </pages> 
    <!-- 
      Set compilation debug="true" to insert debugging 
      symbols into the compiled page. Because this 
      affects performance, set this value to true only 
      during development. 
    --> 
    <compilation debug="true"> 
    <assemblies> 
    <add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 
    </assemblies> 
    </compilation> 
    <httpHandlers> 
    <remove verb="*" path="*.asmx"/> 
    <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 
    <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 
    <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/> 
    </httpHandlers> 
    <httpModules> 
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 
    </httpModules> 
</system.web> 
<system.web.extensions> 
    <scripting> 
    <webServices> 
    <!-- Uncomment this line to customize maxJsonLength and add a custom converter --> 
    <!-- 
     <jsonSerialization maxJsonLength="500"> 
     <converters> 
      <add name="ConvertMe" type="Acme.SubAcme.ConvertMeTypeConverter"/> 
     </converters> 
     </jsonSerialization> 
     --> 
    <!-- Uncomment this line to enable the authentication service. Include requireSSL="true" if appropriate. --> 
    <!-- 
     <authenticationService enabled="true" requireSSL = "true|false"/> 
     --> 
    <!-- Uncomment these lines to enable the profile service. To allow profile properties to be retrieved 
      and modified in ASP.NET AJAX applications, you need to add each property name to the readAccessProperties and 
      writeAccessProperties attributes. --> 
    <!-- 
     <profileService enabled="true" 
         readAccessProperties="propertyname1,propertyname2" 
         writeAccessProperties="propertyname1,propertyname2" /> 
     --> 
    </webServices> 
    <!-- 
     <scriptResourceHandler enableCompression="true" enableCaching="true" /> 
     --> 
    </scripting> 
</system.web.extensions> 
<system.webServer> 
    <validation validateIntegratedModeConfiguration="false"/> 
    <modules> 
    <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 
    </modules> 
    <handlers> 
    <remove name="WebServiceHandlerFactory-Integrated"/> 
    <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 
    <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 
    <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 
    </handlers> 
</system.webServer> 
</configuration> 
+2

Juste un avertissement: il est généralement considéré comme une mauvaise forme d'afficher autant de code. Cela signifie généralement que vous n'avez pas pris le temps de comprendre le problème ou que vous n'avez pas envie de le réduire pour nous. Quoi qu'il en soit, cela montre un manque de respect pour ceux qui pourraient être disposés à aider, ce qui peut être rebutant pour dire le moins. –

+0

Avez-vous essayé d'utiliser une version de JQuery de ce siècle? Nous sommes sur 1.10.2 maintenant, et 2.0.3 est également disponible. Je ne pense pas que la version 1.3 supporte ce que vous essayez de faire! – Jasmine

Répondre

0

On dirait que vous retournez une chaîne, pas un objet JSON. Cela devrait faire ce que vous voulez:

$(document).ready(function() { 
    $("#btnCheck").click(function(e){ 
     $.post("WebService.asmx/CheckUserName", {userName: "something"}, function(data, textStatus){ 
      OnSuccess(data); // Call your success method 
     }, "text"); 
     e.preventDefault(); // Cancel any default actions on this button 
    }); 
}); 

Je recommanderais d'utiliser Firebug et Firefox pour résoudre les problèmes. Laissant la console ouverte, cliquez sur #btnCheck. Si la requête échoue pour une raison quelconque (ou si elle réussit), vous pouvez ouvrir les détails de la demande, voir ce qui a été envoyé et ce qui a été retourné. La seule chose que vous pourriez avoir besoin de modifier était le paramètre manquant suggéré par @Toji (et j'ai depuis ajouté à ma réponse). Cependant, je vérifierais toujours les réponses pour voir si vous obtenez une chaîne JSON ("username") ou juste une chaîne de texte (username).

2

Bonté, c'est beaucoup de code! À l'avenir, je vous recommande de vous concentrer sur un ou deux petits morceaux de code (dans ce cas je dirais l'appel AJAX et la définition de la fonction webservice). Cela rend la lecture plus facile et plus susceptible d'obtenir une réponse. En ce qui concerne le problème, votre définition de service Web indique qu'il prend une chaîne (nom d'utilisateur) mais que vous ne lui envoyez rien. Ceci est une erreur et empêchera le service Web d'être appelé. Vous devez envoyer les types de données appropriés pour tous les arguments de fonction pour que cela fonctionne. Si vous avez l'intention d'envoyer null, faites-le explicitement: { userName: null }

+0

Je savais que j'aurais dû laisser ça aux gars de .NET. Je ai essayé de s'attaquer à partir de l'angle jQuery, mais a raté le paramètre absent. –

Questions connexes