2009-08-14 10 views
0

私は、jQuery経由で私のWebサービスへのajax呼び出しを行うとてもシンプルなjavascriptクラスを持っています。データは正常に返されますが、変数を設定してデータを取得することができません。私は、すべてのAjaxイベントのイベントハンドラを設定しているため、非同期であるかどうかは、Ajax呼び出しの問題ではないと考えていますが、一部は起動しません。何が悪いのか分かりません。ここでは完全なコードは次のとおりです。jQueryに問題があります。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> 

追加情報: 私は私のhtmlページで完全なイベントを削除してに電話をかける場合obj.returnData私の停止イベント(おそらく私のHTMLの完全なイベントが私のtestClassの完全な関数を上書きすると思う)、私は同じ結果を得る。

+0

"これは" testClass.jsで無名関数でに何を指すのでしょうか? –

+0

"this"はオブジェクトのインスタンスを参照する必要があります...そうではないと思っていますか? –

+0

なぜajaxSendが発射していないのか分かりません。それは謎です。 –

答えて

1

あなたの問題はここにある:

this.returnData = data.d; 

this匿名関数の内部では、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); 
       } 
     );  
    } 

} 
+0

それでした!私は本当にこれを感謝します。なぜajaxSendイベントが発作していないのか(なぜなら好奇心から出てくる)知っていますか? –

関連する問題