关于Javascript流程或执行的问题

时间:2011-06-21 07:28:30

标签: javascript html css ajax javascript-events

如果我有如下的JS功能;

function testFn()
{
x.ajaxMethod(param1,JScallBackFunction); //Please do not worry about the syntax..this just indicates an external method call
alert("Line after ajaxMethod");
}

ajaxMethod(),假设是在外部Java文件中定义的某种方法(因此它可以通过DWR或任何东西)返回一些数据......点是执行这行代码需要一些时间...

现在我的问题是下一行的警报什么时候会被触发(即警告(“ajaxMethod");之后的行)

  1. 是否等待完成这两件事(ajaxMethod执行以及JScallBackFunction)
    OR
  2. 如果不等待上述两件事完成,它会被立即解雇吗?
  3. 另外,如果您可以一般性地指导Javascript方法流程执行,那就太棒了。

3 个答案:

答案 0 :(得分:3)

这取决于。 Ajax调用通常是异步的,这意味着在异步函数返回之前不会暂停执行代码。因此,警报将立即执行。

javascript中的异步函数通常与Ajax有关,并从远程服务器加载某些东西。如果您确实希望强制JavaScript在加载该内容时等待,那么您可以为XMLHTTPRequest对象设置一个标志。

这是一个很好的问题:When is JavaScript synchronous?

答案 1 :(得分:2)

在ajax调用后它会立即触发。如果你想让它等待把它放在回调函数中。

编辑:定义回调的方法基本上是这样的:

function(param1, callback) {
   // do stuff
   callback(); // execute callback
}

答案 2 :(得分:0)

首先,当你说

  

ajaxMethod(),让我们说是一些   在外部定义的一种方法   Java文件

我想你的意思是外部JavaScript文件。

当您发送Ajax请求时,您要求浏览器向您发送请求到服务器。 服务器上的此请求可能需要一段时间,您不希望“等待”它。 (这是异步请求的全部概念 - 后台的东西) 所以你告诉浏览器,这里把这个请求发送到服务器。除非服务器响应,否则不要打扰我,一旦服务器响应(我们有“响应”),请调用此方法。这称为回调。当响应到来时,稍后调用该方法。

所以声明

x.ajaxMethod(param1,JScallBackFunction);

(假设它确实获得了XmlHttpRequest,初始化它并在其上调用send方法*)实际上做了两件事:

  1. 发送Ajax请求
  2. 注册一个回调函数,该函数将在服务器响应时调用(当我们有响应时)。当服务器收到响应时,将调用JScallBackFunction
  3. 但由于这是一个异步请求,浏览器不会“等待”,而是在Ajax调用之后继续执行下一个语句(如果有的话)并执行它。

    因此,alert("Line after ajaxMethod");将立即执行。

    *如果这对您没有任何意义,这就是Ajax请求实际上“创建”和“发送”的方式。 This article可以帮助您理解。