asp.net jquery ajax json: exemple Simple d'échanger des données
(Question résolue avec l'aide de deux répondre postes-voir ci-dessous)
Je serais heureux d'aider à obtenir un exemple simple de l'échange de données JSON de données entre un navigateur (à l'aide de JavaScript/JQuery) et ASP.NET (à l'aide de Visual Studio 2010).
Lorsque je clique sur un bouton, la suivante est exécutée:
<script type="text/javascript">
bClick = function () {
var myData = { "par": "smile" };
alert("hi "+myData.par);
$.ajax({
url: "ericHandler.ashx",
data: myData,
dataType: 'json',
type: 'POST',
contentType: 'application/json; charset=utf-8',
success: function (data) { alert("DIDit = " + data.eric); },
error: function (data, status, jqXHR) { alert("FAILED:" + status); }
});
}
</script>
Dans Visual Studio, j'ai le code suivant associé à un fichier ashx. Quand je le lance et cliquez sur le bouton, tout fonctionne comme prévu, sauf que je ne vois pas myData passé pour le code C#--je suis en train de regarder le contexte.Demande.QueryString dans le débogueur et il montre "{}".
J'ai vu des exemples à l'aide de
string stringParam = (string)Request.Form("stringParam");
mais Visual Studio "Demande" ne semble pas être défini. Tout ce que je veux faire, c'est de voir les données se déplacer dans les deux sens, et je semble être la moitié du chemin. Toute aide serait appréciée.
--Code C#--
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace CSASPNETSerializeJsonString
{
///<summary>
///Summary description for ericHandler
///</summary>
public class ericHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string rq = context.Request.QueryString["par"];
context.Response.ContentType = "application/json";
context.Response.Write("{\"eric\":\"12345\"}");
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
* RÉSOLU
Tout d'abord, si vous voulez nous envoyer des paramètres de formulaire à partir de JavaScript pour ASP.NET on devrait utiliser l'appel ajax dans le deuxième post ci-dessous et ne PAS utiliser stringify sur les données. En d'autres termes, si vous n'êtes pas en mesure de spécifier les données envoyées est du json en l'absence de toute spécification par défaut 'application/x-www-form-urlencoded'). Ce sera causes de l'objet de champs à être ajouté dans une "url" (champ=X&champ2=Y&field3=Z..) et montre ainsi dans ASP.NET à l'aide de la Demande.Form["champ"].
Deuxième, si vraiment vous ne voulez envoyer les données JSON, puis spécifier ce type est ce qui est envoyé (comme j'ai fait ci-dessus) et l'utilisation de l'InputStream sur le côté de réception. Outre l'analyse de la chaîne reçue est alors nécessaire pour obtenir les valeurs de champ.
Dans mon exemple, je suis en envoyant les données JSON avoir "manuellement" codé en une chaîne de caractères. Je crois qu'il est la sérialisation JSON routine de sorte que C# les objets peuvent être envoyées.
OriginalL'auteur Eric Schneider | 2012-06-29
Vous devez vous connecter pour publier un commentaire.
D'autres ressources, proposer la suppression de la
contentType: 'application/json; charset=utf-8',
de l'appel AJAX:Lire les valeurs sur le côté serveur:
Vous pouvez également essayer:
ce qui a été mentionné ici: https://stackoverflow.com/a/8714375/139917
Vous êtes correct. jQuery fait pour vous. Puisque vous êtes à l'aide de la méthode HTTP POST. Vous avez besoin d'accéder à vos valeurs avec la Demande.Form["mavaleur"]. J'ai édité ma réponse.
À L'Aide De La Demande.La forme n'a pas aidé, MAIS votre deuxième suggestion de l'utilisation de la Demande.InputStream travaillé! Je reçois les données sérialisées généré par JavaScript. Bien sûr, elle doit maintenant être analysées, ce qui est peut-être la racine du problème ASP.NET ne peut pas avoir une belle cartographie de JSON à certaines données de la structure.
Et enfin, merci beaucoup! J'ai passé des heures à méditer et à la recherche. J'ai eu l'impression de divers articles que ASP.NET avait JSON support intégré, mais je ne suis pas sûr de ce que cela signifie maintenant. ...Eric
Un dernier commentaire, avec l'affectation "var myData = { "pair":"sourire", "smart": 345 };" dans le code JavaScript, et à l'aide de l'état de la Demande.InputStream pour extraire les données passées, si vous n'utilisez pas stringify avant l'envoi, vous recevrez par=sourire&smart=345 alors qu'avec stringify vous recevez,{"pair":"sourire", "smart":345}.
OriginalL'auteur DaveB
J'ai eu ce travail tout de suite. C'est sa forme la plus élémentaire:
HTML:
Code Derrière:
Merci! Cela a été utile--je vais mettre mon résumé dans mon post original. ...Eric
OriginalL'auteur Hanlet Escaño