2012-03-29 12 views
0

Ich habe Schwierigkeiten bei der Erstellung einer dynamischen AJAX Formular-Methode für .NET WebServices.C# WebService senden Standard-Post-Anfrage Körper, antworte mit JSON

Die Idee besteht darin, eine Anfrage zu senden, die dynamisch aus allen Eingaben in einem Formular erstellt wird. Lassen Sie den Server dann mit JSON antworten.

Diese wird aufgerufen, wenn das Formular übermittelt wird, füllt es ein Array mit den Indizes als Eingabefeldnamen und den Wert als Wert:

var params = []; 

for(var i in inputs) 
{ 
    if(inputs[i].type == 'text' || inputs[i].type == 'password') 
    { 
     params[inputs[i].name] = inputs[i].value; 
    } 
} 

Wenn die AJAX Anfrage I laufen eine Schleife gesendet wird, um produzieren die Anfrage Körper:

var l = 0; 
for(var i in parameters) 
{ 
    this.parameters += (l > 0 ? '&' : '') + i + '=' + parameters[i]; 
    l++; 
} 

, die ein Ergebnis wie dieses gibt:

foo=bar&lol=haha 

Das Problem ist, dass Skript servicse JSON nur als Anforderungs Körper wegen des Dekorateur akzeptiert:

[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 

Als ich es will lieber einen JSON-String zurück als XML.

Gibt es eine einfache Lösung?

Antwort

1

Die Lösung, die ich eine recht komplexe Arbeit um mit für etwas aufkommen, das einfach sein sollte. Grundsätzlich habe ich eine Funktion erstellt, die das Xml-Format akzeptiert. Dann werden Daten zu einem Aktualisierungsmodell hinzugefügt, das mit einer vom Client abgerufenen Aktualisierungsmethode für JSON formatiert ist.

Hier ist ein Beispiel:

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
[ScriptService] 
public class JsonHTTPService : System.Web.Services.WebService 
{ 
    static JavaScriptSerializer JSON = new JavaScriptSerializer(); 

    [WebMethod(EnableSession = true)] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public dynamic update() 
    { 
     if (Session["user"] == null) 
     { 
      Session.Add("user", new User()); 
     } 

     User user = (User)Session["user"]; 
     user.responseModel = new ResponseModel(); 

     if (user.updateListeners.Count > 0) 
     { 
      foreach (var updateMethod in user.updateListeners) 
      { 
       updateMethod.run(); 
      } 
      return JSON.Serialize(user.responseModel); 
     } 
     return null; 
    } 

    [WebMethod(EnableSession = true)] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Xml)] 
    public void login(string email, string password) 
    { 
     if (Session["user"] == null) 
     { 
      return; 
     } 

     User user = (User)Session["user"]; 
     if (user.logged) 
     { 
      return; 
     } 

     if (user.Authenticate(email,password)) 
     { 
      user.logged = true; 
      user.updateListeners.Add(new LoginScreenRemover()); 
     } 
    } 
} 
0

versuchen diese JSON.stringify(params);