5 votes

Utilisation de $.getJSON dans .NET MVC 3.0

Je veux utiliser la fonction jQuery.getJSON dans ASP.NET MVC 3.0, j'ai donc écrit le code ci-dessous pour le tester :

    <input id="btn" type="button" />

<script>
        $("#btn").click(function () {
            $.getJSON("/Location/GetData", null, function (data) {
                alert(data);
            });
        });

</script>

et j'ai un LocationController avec la méthode ci-dessous :

public JsonResult GetData()
        {
            List<int> result = new List<int>(){1, 4, 5};
            return Json(result);
        }

Mais ça ne marche pas ! La méthode GetData est appelée, mais 'alert' n'est pas affiché !

8voto

Alconja Points 10626

Vous devez indiquer à MVC qu'il autorise l'appel de votre action JSON via des GET en modifiant votre retour en :

return Json(result, JsonRequestBehavior.AllowGet);

Par défaut ( pour des raisons de sécurité ), ils ne permettent de demander Json que par le biais de POST.

5voto

Alastair Pitts Points 11677

Pour se protéger contre attaques par cross-side-scripting et détournement de JSON MVC 2+ (je crois que c'était 2), exige que vous accédiez aux actions avec des réponses JSON en utilisant la fonction POST plutôt que GET .

Vous pouvez modifier ce comportement en utilisant la surcharge de la fonction Json() où vous définissez le JsonRequestBehavior.AllowGet mais comme décrit dans l'article de blog, ce n'est pas une bonne idée ou une idée sûre.

Pour toutes mes requêtes JSON, qu'il s'agisse de charger des données ou de renvoyer des messages, j'utilise la méthode suivante $.post et limiter l'action du contrôleur pour qu'il n'accepte que les éléments suivants HttpPost .

donc votre code deviendrait :

$("#btn").click(function () {
    $.post("/Location/GetData", null, function (data) {
        alert(data);
    });
});

et

[HttpPost]
public JsonResult GetData()
{
    List<int> result = new List<int>(){1, 4, 5};
    return Json(result);
}

2voto

Mikael Eliasson Points 2962

Tout d'abord. Installez Firebug pour Firefox afin de pouvoir inspecter la réponse que le serveur envoie. Chrome et IE ont également des outils intégrés que vous pouvez utiliser.

Sans connaître la réponse, je suppose que le problème vient du fait que ASP.NET MVC vous protège contre le détournement de JSON en ne permettant pas de renvoyer JSON pour une requête GET par défaut.

Essayez de changer pour :

return Json(result, JsonRequestBehavior.AllowGet);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X