3
votes

paramètre non envoyé dans la requête ajax

Je veux appeler la méthode d'action (AddCompare) en utilisant une requête Ajax à la vue,

Mon problème est que le paramètre envoyé à AddCompare Action a toujours une valeur nulle, Alors que la valeur du paramètre dans la fonction AddToCompare est correcte

ceci est mon code

Vue:

public JsonResult AddCompare(int id)
{
   //id is zero !!!
    int param=id;
}

Controller

@model IEnumerable<Products>
@foreach (var item in Model)
{
    <li>
        <div class="left-block">

            <div class="quick-view">
                <a title="Add To Compare" class="heart" href="#" onclick="AddToCompare(15)"></a>

            </div>

        </div>

    </li>
}

<script>
function AddToCompare(param) {
        alert(param);  //display correct value 15

        $.ajax({

            type: "GET",
                url: "@Url.Action("AddCompare")",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: JSON.stringify({
                    id: param

                }),
            success: function (response) {

                var myObject = eval('(' + response.d + ')');

                if (myObject > 0) {


                    $(".errMsg").append("<ul><li>Data saved successfully</li></ul>");

                }

                else {

                    $(".errMsg").append("<ul><li>Opppps something went wrong.</li></ul>");

                }

                $(".errMsg").show("slow");


            },

            error: function (response) {

                alert(response.status + ' ' + response.statusText);

            }

        });

    }
</script>

Où est le problème?


5 commentaires

Pouvez-vous essayer d'utiliser le type: "POST" dans votre requête Ajax? Je pense que dans une demande GET, les paramètres doivent être dans l'URI.


oui, j'utilise POST dans la requête Ajax mais je ne résous pas


essayez $ .get, c'est la syntaxe $ .get (URL, données, fonction (données, état, xhr), dataType)


@Bosco. Yesssss, tankez-vous. s'il vous plaît poster cette réponse pour j'accepte


Pouvez-vous essayer de définir processData: false dans votre appel Ajax?


3 Réponses :


0
votes

Dans votre appel AJAX, vous n'avez pas besoin de stringify

[HttpGet]
public JsonResult AddCompare(int id)
{

}

Décorez votre méthode d'action avec HttpGet même s'il s'agit de GET par défaut. Juste une meilleure pratique.

 $.ajax({
    // your code
    data: {id: param},


2 commentaires

pas d'erreur ou d'exception, seule la valeur d'id dans Action est zéro


J'ai utilisé le code ci-dessus pour tester localement sur ma machine, cela fonctionne. Vérifiez vos onglets de réseau si elle passe cette valeur, vérifiez également vos itinéraires.



0
votes

Puisque vous utilisez un verbe Get, vous pouvez faire ceci:

                $.ajax({
                    type: "GET",
                    url: "/Controller/Action?ID=" + id,
                    dataType: "json"
                }).done(function (response) {
                    //response code here 
                });

Modifiez le contrôleur et l'action selon vos besoins et vous pouvez ajouter d'autres paramètres à l'ajax si nécessaire. p >


0 commentaires

1
votes

essayez d'utiliser

$.get(URL,data,function(data,status,xhr),dataType)

voici la syntaxe

$.get 


0 commentaires