如果我有如下的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");
之后的行)
另外,如果您可以一般性地指导Javascript方法流程执行,那就太棒了。
答案 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方法*)实际上做了两件事:
JScallBackFunction
。但由于这是一个异步请求,浏览器不会“等待”,而是在Ajax调用之后继续执行下一个语句(如果有的话)并执行它。
因此,alert("Line after ajaxMethod");
将立即执行。
*如果这对您没有任何意义,这就是Ajax请求实际上“创建”和“发送”的方式。 This article可以帮助您理解。