2010-06-21 9 views
2

J'ai construit le formulaire de contact dans aspx 3.5 et j'utilise jQuery pour l'envoyer au service web (asmx).

Le service Web doit renvoyer un code d'erreur ou de succès. Le problème est que, à la méthode web, je ne reçois qu'une seule valeur et non un tableau. Je suis un peu nouveau dans ajax et j'ai essayé beaucoup de solutions mais sans aucun résultat. S'il vous plaît si vous pouvez seulement m'expliquer le principe de ce qu'il faut faire aussi être bon.comment envoyer des données json à asmx (à partir de aspx) en utilisant jquery?

C'est le côté client:

$(document).ready(function() 
{ 
    $("#submit").click(function(event) 
    { 
     $.ajax 
     ({ 
      type: "POST", 
      url: "RVContactFormMailer.asmx/HelloToYou",     
      data: "{'name': '" + $('#name').val() + "', 'company':'" + $('#company').val() + "', 'phone':'" + $('#phone').val() + "', 'email':'" + $('#email').val() + "', 'questions':'" + $('#questions').val() + "'}" ,     
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(msg) { 
      AjaxSucceeded(msg); 
     }, error: AjaxFailed 
     }); 
    }); 

Dans Firebug son envoie correctement:

{'name': 'jhon', 'company':'example', 'phone':'123', 'email':'[email protected]', 'questions':'hello'} 

Le code asmx est (s'il vous plaît ignorer les noms, son exemple:

[WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [ScriptService] // To allow this Web Service to be called from script, using ASP.NET AJAX or JQuery. 
    [ToolboxItem(false)] 
    public class RVContactFormMailer : System.Web.Services.WebService 
    { 
     [WebMethod] 
     [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
     public string HelloToYou(string name) 
     { 
      return "Hello " + name; 
     } 
    } 

Quand je débogue, je vois que le paramètre d'entrée "nom" ne contient qu'une seule chaîne - je ne sais pas comment obtenir la chaîne json complète t Je l'envoie au service et contient toutes les données du formulaire - je veux le désirialiser en chaîne de caractères ou quelque chose comme ça, et le traiter. comment puis-je faire cela?

Répondre

1

le problème n'a pas été du côté client - il était dans le côté serveur - le problème est que je vous envoie quelques paramètres au service Web, mais la fonction obtenir une seule:

[WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public string HelloToYou(string name) 

alors que le bon devrait être:

[WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public string HelloToYou(string name, string company, string phone, string email, string questions) 

de toute façon, Merci pour l'aide!

+0

L'option AUTRE aurait été de créer un objet complexe du côté client et de le désérialiser sur le serveur en tant qu'objet nommé avec cette complexité seulement avoir un seul objet côté serveur passé. –

+0

Mark pouvez-vous s'il vous plaît donner plus d'info/exemple ou un lien vers un article? merci – eran

+0

j'utilise l'information dans: http://stackoverflow.com/questions/2785441/asp-net-json-web-service-post-form-data et envoyer l'objet complexe comme json. merci – eran

0

Avez-vous essayé d'essayer la collection request.form? Puisque vous faites une demande de publication et que vous passez les paramètres en tant que données à la demande, ils seront disponibles dans Request.Form.

+0

quand je regarde le this.Context.Request.Form, son vide. comment puis-je obtenir la chaîne JSON que j'ai envoyé au service Web? – eran

+0

ok, si vous obtenez le nom correctement, alors je vais suggérer de le faire: {param: {'name': 'jhon', 'company': 'exemple', 'téléphone': '123', 'email' :'[email protected] ',' questions ':' bonjour '} } –