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