Question

J'ai une classe javascript très simple qui fait un appel ajax à un service web de mes via jquery. Il renvoie les données avec succès, mais je suis incapable de le récupérer via une variable que je mets les données. Je ne pense pas que ce soit une question de l'appel ajax étant asynchrone ou non parce que je l'ai mis en place des gestionnaires d'événements pour tous les événements ajax, mais certains d'entre eux ne se déclenche pas. Je n'ai aucune idée de ce qui ne va pas. Voici le code complet:

Javascript:

function testClass(){
    this.returnData = "";
    this.FireAjax = function(){
        $.getJSON("http://localhost/mywebapp/webservices/service.asmx/Initialize?userID=12&jsoncallback=?",
            function(data){
                this.returnData = data.d;
                alert(data.d);
            }
        );  
    }

}

page HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript" src="http://localhost/mywebapp/js/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="testClass.js"></script>

<script type="text/javascript">
    $(document).ready(function(){

        var obj = new testClass();

        $("#debug").ajaxError(function(event, request, settings){
            $(this).append("<b>Ajax Error!</b><br />"); //this does not fire
        });

        $("#debug").ajaxSend(function(evt, request, settings){
            $(this).append("<b>Ajax Send!</b><br />"); //this does not fire!?
        });

        $("#debug").ajaxStop(function(){
            $(this).append("<b>Ajax Stopped</b><br />"); //this fires
        });

        $("#debug").ajaxComplete(function(event,request, settings){
            $(this).append("<b>Ajax Completed!</b><br />"); //this fires
            $(this).append("<h2>" + obj.returnData + "</h2>"); //this returns an empty string!!!!!!
        });

        $("#debug").ajaxSuccess(function(evt, request, settings){
            $(this).append("<b>Ajax Successful!</b><br />"); //this fires
        });

        $("#debug").ajaxStart(function(){
            $(this).append("<b>Ajax Started!</b><br />"); //this fires
        });

        obj.FireAjax();
    });
</script>
</head>

<body>
<div id="debug">

</div>
</body>
</html>

Infos supplémentaires: Si je supprime l'événement complet dans ma page html et placer l'appel à obj.returnData dans mon cas d'arrêt (en pensant que peut-être mon événement HTML complet écrase mes TestClass fonction complète), i obtenir les mêmes résultats.

Était-ce utile?

La solution

Votre problème ici est:

this.returnData = data.d;

this dans la fonction anonyme fait référence à l'objet Options jQuery, pas l'instance de votre objet.

Essayez ceci:

function testClass(){
    this.returnData = "";
    var that = this;
    this.FireAjax = function(){
        $.getJSON("http://localhost/mywebapp/webservices/service.asmx/Initialize?userID=12&jsoncallback=?",
                function(data){
                        that.returnData = data.d;
                        alert(data.d);
                }
        );      
    }

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top