在异步方法完成执行之前,如何推迟javascript执行

时间:2014-06-13 04:56:57

标签: javascript jquery jquery-deferred document-ready .when

我一直在研究Jquery的when thendeferred个关键字&函数但我无法在我的一个视图的ready()函数中将它如何应用于简单的第三方异步回调方法。

实际发生的是我的视图得到loaded没有数据,因为数据应该从ready()中完成的异步方法执行中填充,但视图为loaded在异步回调方法可以输入它的回调方法之前。我已经在该回调方法中发出警告,并且在完全加载后页面已经离开脚本时它永远不会弹出。

与此相关,我也在研究jQuery.holdReady()。关于如何在这种设计中实现同步性,我有点徘徊。

这就是它的样子。

$( document ).ready(function() {
   var xmlRequest = $('#requestStringHiddenField').val();
   var action = "getListOfReservations";
   asynchronousCallbackCall(xmlRequest, "callbackMethod", action);
}); 

function callbackMethod(result) {
     //unreachable      
     alert(result);
}

感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

如果asynchronousCallbackCall的第二个和第三个参数是回调函数,则应该自己传递函数,而不是将它们的名称作为字符串传递:

var action = getListOfReservations;
asynchronousCallbackCall(xmlRequest, callbackMethod, action);

答案 1 :(得分:0)

如果使用$.ajax执行异步调用,则应使用属性async: false,这将阻止脚本执行,直到调用完成并返回响应。

有关$.ajax的更多信息,请参阅此链接:

http://api.jquery.com/jquery.ajax/

答案 2 :(得分:-1)

使用同步调用而不是异步调用。同步请求在执行下一个代码之前等待调用完成。

  

var request = new XMLHttpRequest();
  request.open('GET','/ getListOfReservations',false); //'false'使请求同步
  request.send(NULL);
  
  if(request.status === 200){
   警报(request.responseText);
  }