2010-08-10 3 views
1

J'utilise asmx pour récupérer des données de DB,Service Web asmx, json, javascript/jquery?

public class TestPage1 
{ 
    public int UserID { get; set; } 
    public string UserName { get; set; } 
    public string Password { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string MiddleName { get; set; } 
} 




    [WebMethod] 
    public EntityLayer.TestPage1 GetData(int id) 
    { 
     TestPage1 test = TestPage1.GetData(id).SingleOrDefault(); 
     return test; 
    } 


$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "WebService.asmx/GetData", 
    data: "{id}", 
    dataType: "json" 
}); 

Comment puis-je desrialize objet de test en javascript ?? et y a-t-il un meilleur moyen? grâce

Répondre

11

Je vous recommande de regarder ma réponse précédente pour des questions proches How do I build a JSON object to send to an AJAX WebService? et Can I return JSON from an .asmx Web Service if the ContentType is not JSON?

Le code correct doit ressembler suivant

[WebMethod] 
[ScriptMethod (ResponseFormat = ResponseFormat.Json)] 
public EntityLayer.TestPage1 GetData(int id) 
{ 
    TestPage1 test = TestPage1.GetData(id).SingleOrDefault(); 
    return test; 
} 

et

var myData = 5; 
$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "WebService.asmx/GetData", 
    //data: {id:JSON.stringify(myData)}, 
    data: JSON.stringify({id:myData}), 
    dataType: "json", 
    success: function(response){ 
     alert("UserName=" + response.d.UserName + 
       ", FirstName=" + response.d.FirstName + 
       ", MiddleName=" + response.d.MiddleName+ 
       ", LastName=" + response.d.LastName); 
    } 
}) 

JSON.stringify est une fonction du script json2.js que vous pouvez télécharger à partir http://www.json.org/js.html.

Si les valeurs id sont les nombres entiers JSON.stringify(myData) sont les mêmes que myData, mais pour tous les exemples plus complexes, je vous recommande strictement d'utiliser cette fonction.

Comme vous pouvez également voir à partir du code tous les résultats de la méthode Web seront enregistrés dans la propriété d, vous devez donc utiliser par exemple la syntaxe response.d.FirstName pour accéder au prénom.

MISE À JOUR: En cas de HTTP GET le paramètre data doit être {id:JSON.stringify(myData)}. En cas de HTTP POST: JSON.stringify({id:myData})

+1

Et quiconque veut essayer cela - n'oubliez pas de marquer votre classe WebService avec [ScriptService] - juste eu un problème avec cela. – kape123

3

Un couple de choses ...

Certains non testé exemple de code:

$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "WebService.asmx/GetData", 
    data: "{id}", 
    dataType: "json" 
    success: function(data) { 
    var str = '' + 
     'UserName: ' + data.UserName + '\n' + 
     'Password: ' + data.Password + '\n' + 
     'FirstName: ' + data.FirstName + '\n' + 
     'LastName: ' + data.LastName + '\n' + 
     'MiddleName: ' + data.MiddleName; 
    alert(str); 
    } 
}); 
Questions connexes