Events jqueryajax计时问题

Events jqueryajax计时问题,events,jquery,getjson,Events,Jquery,Getjson,我有一个非常简单的javascript类,它通过jquery对我的web服务进行ajax调用。它成功返回数据,但我无法通过设置数据的变量检索数据。我认为ajax调用是否异步并不重要,因为我已经为所有ajax事件设置了事件处理程序,但其中一些没有启动。我不知道怎么了。以下是完整的代码: Javascript: function testClass(){ this.returnData = ""; this.FireAjax = function(){ $.getJS

我有一个非常简单的javascript类,它通过jquery对我的web服务进行ajax调用。它成功返回数据,但我无法通过设置数据的变量检索数据。我认为ajax调用是否异步并不重要,因为我已经为所有ajax事件设置了事件处理程序,但其中一些没有启动。我不知道怎么了。以下是完整的代码:

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);
            }
        );  
    }

}
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>

无标题文件
$(文档).ready(函数(){
var obj=newtestclass();
$(“#调试”).ajaxError(函数(事件、请求、设置){
$(this.append(“Ajax错误!
”);//这不会触发 }); $(“#调试”).ajaxSend(函数(evt、请求、设置){ $(this.append(“Ajax发送!
”);//这不会触发!? }); $(“#调试”).ajaxStop(函数(){ $(this.append(“Ajax已停止
”);//此 }); $(“#调试”).ajaxComplete(函数(事件、请求、设置){ $(this).append(“Ajax已完成!
”);//这将激发 $(this.append(“+obj.returnData+”);//这将返回一个空字符串!!!!!! }); $(“#调试”).ajaxSuccess(函数(evt、请求、设置){ $(this).append(“Ajax成功!
”);//此命令激发 }); $(“#调试”).ajaxStart(函数(){ $(this).append(“Ajax已启动!
”);//此命令激发 }); obj.FireAjax(); });
其他信息: 如果我删除html页面中的complete事件,并在我的stop事件中调用obj.returnData(认为可能我的html complete事件覆盖了我的testClass complete函数),我会得到相同的结果。

您的问题在于:

this.returnData = data.d;
这个
在匿名函数中指的是jQuery选项对象,而不是对象的实例

试试这个:

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);
                }
        );      
    }

}

testClass.js中的匿名函数中的“this”指的是什么?“this”应该指的是对象的实例……你认为不是这样吗?不知道为什么ajaxSend没有启动,这是个谜。就是这样!我真的很感激。你知道为什么ajaxSend事件没有触发(只是出于好奇)吗?