2009-07-27 6 views
0

Je suis essayer d'appeler mon service Web avec appel ajax, mais je suis obtenir pas le succès d'appeler le service web avec elle s'il vous plaît trouverez ci-dessous le codeJSON sérialisation

Méthode Web que je suis en train d'appeler

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

/// <summary> 
/// Summary description for Jasonexample 
/// </summary> 
[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[ScriptService] 
public class Jasonexample : System.Web.Services.WebService { 

    public Jasonexample() { 

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

    [WebMethod] 
    public string HelloWorld(Dictionary<string,object>Input) { 
     return "Hello World " + Input["FName"].ToString() + " " + Input["LName"].ToString(); 
    } 
    [WebMethod] 
    public string test () 
    { 
     return "test"; 
    } 

} 

Mon appel ajax javascript

/// <reference path="jquery-1.2.3.min.js" /> 
$(document).ready(function() { 
    dict = new Object(); 
    dict["FName"] = "Abhishek"; 
    dict["LName"] = "Hingu"; 
    $.ajax({ 
    type: "POST", 
    url: "Jasonexample.asmx/HelloWorld", 
    data: '[{"Key":"FName","Value":"Abhi"},{"Key":"LName","Value":"Hingu"}]', 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
     alert("Hello"); 
     alert(msg); 
    }, 
    fail:function(msg) 
    { 
     alert("fail"); 
    } 
    }); 
}); 

maintenant, quelqu'un peut vous me dire comment passer collection dictionnaire ajax appelé

Répondre

0

J'ai résolu ce problème avec cette solution (j'utilisais Microsoft Ajax)

sur la méthode fait côté serveur:

[WebMethod] 
    public string GetPersonsList (int page, string filter, int ID, OrderedDictionary SelectParameters) 
    { 
     //code   
     return outData; 
    } 

Et appel client fait la demande avec de tels paramètres POST:

{"page":0,"filter":"","ID":-1,"SelectParameters":{"pClassId":1}} 

Donc, dans votre appel, vous devriez faire des données variables comme ceci:

data: '{"Input":{"FName":"Abhi","LName":"Hingu"}}' 
0

Un bon moyen de comprendre comment une collection particulière est prévue pour la désérialisation est de retourner cette collection à partir d'une méthode de test et d'examiner comment JavaScriptSerializer l'a sérialisée. Par exemple, cette méthode:

[WebMethod] 
public Dictionary<string,object> HelloWorld() { 
    Dictionary<string, object> d = new Dictionary<string, object>(); 

    d.Add("FName", "Dave"); 
    d.Add("LName", "Ward"); 

    return d; 
} 

Retours cette JSON:

{"FName":"Dave","LName":"Ward"} 

Essayez d'utiliser comme votre .ajax de $() paramètre de données:

data: "{'FName':'Dave','LName':'Ward'}" 

Pour éviter l'ambiguïté qui vient En utilisant une collection vague, comme Dictionnaire, vous pourriez envisager using a DTO class instead.