jquery ajax ‘post’ call

Je suis nouveau à jQuery et Ajax, et j’ai des problèmes avec un «post».

J’utilise un appel “post” jQuery Ajax pour enregistrer des données dans une firebase database. Lorsque je tente de sauvegarder les données, il passe null à ma méthode C #. Le jQuery ressemble à ceci:

function saveInfo(id) { var userID = id; var userEmail = $('.userEmail').val(); var userName = $('.userName').val(); var dataJSON = {"userID": userID, "userEmail": userEmail, "userName": userName}; $.ajax({ type: 'POST', url: '../../Services/AjaxServices.svc/SaveUser', data:JSON.ssortingngify(dataJSON), contentType: 'application/json; charset=utf-8', dataType: 'json' }); return false; }` 

.userEmail et .userName sont des références de classe aux champs de saisie. Le code C # ressemble à ceci:

 [ServiceContract(Namespace = "http://testUsePage.com")] [AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)] public class AjaxServices { [OperationContract] [WebInvoke(Method = "POST", BodyStyle=WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json)] public void SaveUser(User user) { //code here handles save } } 

J’ai un point d’arrêt défini dans la méthode ‘SaveUser’ et l’object User transmis est toujours null. Merci!

EDIT: j’ai commuté ‘POST’ sur ‘GET’ à la fois dans l’appel ajax et l’atsortingbut WebInvoke. Le passage d’un paramètre ({“UserID”: UserID}) à la méthode avec la signature (public void SaveUser (chaîne UserID)) atteint le point d’arrêt et transmet l’ID utilisateur sans exception. Le fait de revenir à une publication provoque immédiatement une erreur de serveur interne.

Vous devriez envoyer vos données utilisateur de cette façon:

{utilisateur: {utilisateur: 1, …}}

depuis que vous utilisez wrappedrequest. Le premier élément de votre JSON devrait être votre nom de paramètre.

Le rest de votre code semble bien. Vous devriez utiliser ssortingngify.

Vous n’avez pas besoin d’utiliser JSON pour quelque chose d’aussi petit. essaye ça

 function saveInfo(id) { var userID = id; var userEmail = $('.userEmail').val(); var userName = $('.userName').val(); $.ajax({type: 'POST', url: '../../Services/AjaxServices.svc/SaveUser/?userID='+userID+"&userEmail="+userEmail+"&userName="+userName, }); return false; } 

Vous ne définissez pas la propriété RequestFormat de l’atsortingbut WebInvoke sur json.

Également dans l’appel $ .ajax, envoyer des données: dataJSON sans l’appel JSON.ssortingngify.

Si cela échoue, essayez ce qui suit, qui publiera des informations de formulaire codées (valeur par défaut) et non JSON. côté client

 $.post('../../Services/AjaxServices.svc/SaveUser', {"userId": userID, "userEmail": userEmail, "userName": userName} ); 

du côté serveur

 [WebInvoke(Method = "POST", UriTemplate = "SaveUser?userId={userId}&userEmail={userEmail}&userName={userName}")] public void SaveUser(ssortingng userId, ssortingng userEmail, ssortingng userName) 

Avez-vous essayé d’ouvrir l’onglet Net dans Firebug de Firefox et de profiler votre appel pour voir quelles sont les données réelles publiées sur le service Web? Essayez cela, si les données sont vides, alors vous savez qu’il y a quelque chose qui ne va pas dans votre Javascript, puis essayez de déboguer votre Javascript.

Mais le problème est probablement que votre signature de méthode de service Web attend un object Utilisateur en tant que paramètre, mais que vous transmettez une série de parameters littéraux. Vous pouvez changer votre signature de méthode pour quelque chose comme ça et ça pourrait marcher:

 public void SaveUser(ssortingng userID, ssortingng userEmail, ssortingng userName) 

J’ai lu vos commentaires, essayez ceci:

Aucune chaîne sur votre object JSON dans le script côté client

 public class AjaxServices { [OperationContract] [WebInvoke(Method = "POST", BodyStyle=WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)] public void SaveUser(ssortingng userID, ssortingng userEmail, ssortingng userName) { //code here handles save } } 

Simplement: l’atsortingbut data de $.ajax() est une carte (object) de données et non une chaîne de données. Ne pas ssortingngifier l’object avant de l’envoyer:

 var dataJSON = {"userID": userID, "userEmail": userEmail, "userName": userName}; $.ajax({ type: 'POST', url: '../../Services/AjaxServices.svc/SaveUser', data: dataJSON, contentType: 'application/json; charset=utf-8', dataType: 'json' });