2014-04-10 52 views
1

我打电话给改变事件的两个函数。如何在第一次执行后调用第二个函数?

function1(); 
function2(); 

function1():是一个Ajax调用
function2():功能1之前得到执行()。

这是怎么发生的?

任何帮助?

+2

函数1必须接受一个回调方法,其中你将调用function2 ...回调将在ajax调用完成后执行 –

+1

你可以从http://stackoverflow.com/questions获得一个基本的想法/ 14220321 /如何返回ajax调用的响应 –

+0

您需要了解更多关于两个概念的信息1)Ajax调用以及它们如何异步。 2)Javascript回调。阅读这两个,你就会知道为什么会发生这种情况。 – Nikhil

回答

1
Please look at the code written below: 

function1() { 
    $.ajax({ 
    url: myurl, 
    type: 'GET', 
    async:false, 
    success: function(response) { 
    function2(); 
    } 
}); 
} 

请注意,这里的 “异步:假” 将确保成功的方法调用当第一次功能已成功执行。所以你应该使用“async:false”来确保function2()将在function1()之后调用。

0

如果function1()然后AJAX功能在你的Ajax

成功调用function2()如果你正在使用jQuery阿贾克斯

function1() { 
    $.ajax({ 
     url: myurl, 
     type: 'GET', 
     success: function(response) { 
     function2(); 
     } 
    }); 
} 
0

从阿贾克斯成功响应后调用你的函数2。

function function1() 
{ 
    //Ajax Call 
    .. 
    .. 

    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    function2(); 
    } 
} 
3

Ajax第一A意味着asynchronous,即同时仍在处理Ajax请求经常JavaScript程序流程将继续。因此,function2将在从function1开始的Ajax请求完成之前执行。

解决方案:Javascript中的每个异步方法都会为您提供所谓的callback,这是一个将在异步方法完成后调用的函数。在jQuery.ajax()这个回调提供了参数success。如果您在此回调中拨打function2,它将起作用。

function1() { 
    ... 
    $.ajax({ 
     url: '...', 
     type: 'GET', 
     success: function(data) { 
     // this will be executed after the asynchronous method finishes 
     function2(); 
     } 
    }); 
} 
0

通常这样调用

function1(function() { 

      function2(); 

     }); 

如果是Ajax调用这样

function function1() { 
    $.ajax({ 
     url: "url", 
     type: 'POST', 
    }).success(function (html) { 
     function2(); 
    }); 
} 

Fiddle

0

jQuery的AJAX的回报延迟对象(http://api.jquery.com/category/deferred-object/),它的真正有用的像你的东西。顺便说一下,延迟对象支持链接模式,所以你可以调用多个函数。

所以,陆续运行一个功能,您可以采取以下

function ajaxCall(){ 
    return $.get('your/api/call', {param:1}); 
} 

function fun1(){ 
    console.log('Function 1 was called'); 
} 

function fun2(){ 
    console.log('Function 2 was called'); 
} 


ajaxCall().done(fun1).done(fun2); 

或者你也可以使用$。当

$.when($.get('your/api/call')) 
    .then(function(){ alert(1); }) 
    .then(function(){ alert(2); }); 

有用的链接:

jQuery ajax

jQuery when

jQuery deferred

相关问题