2014-04-10 6 views
1

변경 이벤트에서 두 개의 함수를 호출합니다.첫 번째 실행 후 두 번째 함수를 호출하는 방법은 무엇입니까?

function1(); 
function2(); 

function1()가 : 아약스 호출
function2()입니다 : 기능 1 전에 실행지고있다().

왜 이런 일이 발생합니까?

어떤 도움이 필요합니까?

+2

function1은 function2를 호출 할 콜백 메소드를 받아 들여야합니다 ... ajax 호출이 완료되면 콜백이 실행됩니다. –

+1

http://stackoverflow.com/questions에서 기본 아이디어를 얻을 수 있습니다./14220321/AJAX 호출 응답 방법 –

+0

두 가지 개념에 대해 더 자세히 알아 보았습니다. 1) Ajax 호출과 비동기 호출 방법. 2) 자바 스크립트 콜백. 이 두 가지를 읽으면 이것이 일어나는 이유를 알게 될 것입니다. – Nikhil

답변

1
Please look at the code written below: 

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

여기에 "비동기 : false"를 참고 성공 방법을 호출 할 수 있도록됩니다 첫 번째 함수가 성공적으로 실행되었습니다. 따라서 function2()가 function1()을 호출 할 수 있도록 "async : false"를 사용해야합니다.

0

function1() 당신이 아약스에서 성공적인 응답 후 기능 2를 호출 JQuery와 아약스

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

를 사용하는 경우 아약스 기능은 다음 아약스

의 성공에 function2()를 호출하는 경우.

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

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

Ajax의 제 A는 Ajax 요청이 여전히 처리되는 동안 정규 자바 스크립트 프로그램 흐름이 계속 즉 asynchronous을 의미한다. 따라서 function2function1에서 시작된 Ajax 요청이 완료되기 전에 실행됩니다.

해결 방법 : 자바 스크립트의 모든 비동기 메서드는 비동기 메서드 완료 후 호출되는 함수 인 소위 callback을 제공합니다. jQuery.ajax()에서이 콜백은 success 매개 변수와 함께 제공됩니다. 이 콜백 내에 function2에 전화를 걸면 작동합니다.

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

일반적으로 전화 Fiddle

0

jQuery를 아약스 반환 연기 객체 (http://api.jquery.com/category/deferred-object/), 그 진짜로

유용한 이

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

function1(function() { 

      function2(); 

     }); 

Ajax 호출과 같은 너 같은 것들. 그건 그렇고, 지연 객체 지원 체인 패턴, 그래서 당신은 하나 이상의 기능을 호출 할 수 있습니다.

그래서, 당신이 할 수있는 또 다른 후 하나 개의 함수를 실행하려면 다음

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

관련 문제