内联ajax和document.ready怀疑

时间:2011-04-29 01:57:47

标签: jquery html

我正在进行如下内联的ajax调用,并将响应存储在全局变量中,并出于某些性能原因稍后访问。

<script type="text/javascript"> 
   var gblAjaxResponse;
   $.ajax({
      url: '/test.aspx',
      success: function(data) {
       gblAjaxResponse=data;
      }      
    });                                     
</script>

现在我想在ajax文件的document.ready中使用这个全局变量。一旦DOM准备就绪,我就必须在该页面上的某些div上使用这些数据。

$(document).ready(function() {

 alert(gblAjaxResponse);   

});

我现在有以下问题。

1)由于ajax是异步调用,因此确保在我准备好document.ready时总是得到对该全局变量的响应。 2)我的document.ready代码是否有可能在ajax成功处理程序返回后执行 3)我不想使用asyn false选项,因为它可以挂起。 4)无论如何都要检查成功是否完成并返回数据。

任何建议都将受到赞赏

3 个答案:

答案 0 :(得分:3)

  

1)因为ajax是异步调用它   确定我总是得到回复   到了那个全局变量的时候   我准备好了document.ready。

不,document.ready之前可以执行。

  

2)我有没有机会   document.ready代码被执行   在ajax成功处理程序下面返回

  

4)无论如何都要检查是否成功   已完成并返回数据。

根据肯尼斯的回答,你可以这样做:

<script type="text/javascript">
   var gblAjaxResponse;
   $.ajax({
       url: '/test.aspx',
       success: function(data) {
          gblAjaxResponse = data;
          myCallbackFunction();
      }
   });

   function myCallbackFunction(){
       alert(gblAjaxResponse);
   }                              
</script>

如果您需要在gblAjaxResponse中使用document.ready,也可以这样做:

<script type="text/javascript">
   var gblAjaxResponse = null;
   $.ajax({
       url: '/test.aspx',
       success: function(data) {
          gblAjaxResponse = data;
      }
   });
   $(document).ready(function(){
       //Wait until gblAjaxResponse has value:
       var intervalId = setInterval(function(){
           if(gblAjaxResponse !== null){
               clearInterval(intervalId);
               myCallbackFunction();
           }
       }, 100);
   });
   function myCallbackFunction(){           
       alert(gblAjaxResponse);
   }                              
</script>

答案 1 :(得分:1)

这是我的建议:

将AJAX调用放在$(document).ready()中,然后在成功时执行回调函数。

<script type="text/javascript">
   var gblAjaxResponse;
   $(document).ready(function(){
       $.ajax({
          url: '/test.aspx',
          success: function(data) {
              gblAjaxResponse = data;
              myCallbackFunction();
          }
       });  
   });

   myCallbackFunction(){
       alert(gblAjaxResponse);
   }                              
</script>

答案 2 :(得分:0)

虽然函数回调是避免挂起脚本(可能还有页面)的最佳方法,但您也可以强制调用同步:

$.ajax{
  url: blah,
  type: json,
  async: false
}

就像我说的那样,这会强制你的其他javascript等待请求。