2012-10-18 2 views
0

jQuery의 두 가지 기능이 있습니다. 두 함수 모두 jQuery ajax를 호출한다.
에는 모두 async : false 속성이 있습니다.
둘 다 함수에서 나는 아약스 응답 조건에 따라 리디렉션하고있다.

첫 번째 함수의 성공에서 나는 다른 함수를 호출하고 다른 페이지로 리디렉션하고 있습니다. 하지만 제 두 번째 함수가 첫 번째 함수의 응답을 기다리지 않기 때문에 첫 번째 함수가 리디렉션되지 않습니다.
희망 문제는 제 질문에서 분명합니다.두 개의 ajax jquery 함수를 동기화하십시오.

내 첫 번째 기능은

function fnGetCustomer() { 
function a(a) { 
    $("#loading").hide(); 
    //on some condition 
    //other wise no redirection 
    self.location = a; 
} 
var b = $("input#ucLeftPanel_txtMobile").val(); 

"" != b && ($("#loading").show(), $.ajax({ 
    type: "POST", 
    url: "Services/GetCustomer.ashx", 
    data: { "CustMobile": b }, 
    success: a, 
    async: false, 
    error: function() { 
     $("#loading").hide(); 
    } 
})); 

}

내 두 번째 함수 내가 내 첫 번째 함수를 사용하고있는 첫 번째 함수

function fnSecond() { 
    $.ajax({ 
    type: "POST", 
    url: "some url", 
    async: false, 
    data: { "CustMobile": b }, 
    success: function(){ 
     fnGetCustomer(); 
     //if it has all ready redirected then do not redirect 
     // or redirect to some other place 
    }, 
    error: function() { 

     $("#loading").hide(); 
    } 

})); 

}

를 호출하고 다음과 같이이다 모두 준비 됐어. 그래서 저는 제 첫 번째 기능을 바꾸고 싶지 않습니다.

+1

하여 Ajax 코드를 – Hkachhia

+1

'비동기를 제시해주십시오 : FALSE '는 사용해서는 안됩니다, 그리고 jQuery를의 다음 주요 릴리스에서 더 이상 사용되지 않습니다. – Alnitak

+0

몇 가지 간단한 모형 또는 발췌 문장을 제공합니다. – user10

답변

2

이렇게 설정하면됩니다.

$.ajax({ 
    data: foo, 
    url: bar 
}).done(function(response) { 
    if (response == "redirect") { 
     // redirect to some page 
    } else { 
     $.ajax({ 
      data: foo, 
      url: bar 
     }).done(function(response2) { 
      if (response2 == "redirect") { 
       // redirect to some other page 
      } else { 
       // do something else 
      } 
     }); 
    } 
});​ 

내가 이런 일을 테스트하지했지만, 그 두 번째를 보낼 수 있도록 최초의 AJAX 호출의 결과를 필요로하지 않는 경우 내가

2

을 시작 했죠 방법 약이다 당신은 전화를 추적하기 위해 카운터를 추가 할 수 있습니다. 두 통화를 동시에 보낼 수 있기 때문에 응답 성이 훨씬 좋아집니다.

var requestsLeft = 2; 

$.ajax({ 
    url: "Firsturl.ashx", 
    success: successFunction 
}); 

$.ajax({ 
    url: "Secondurl.ashx", 
    success: successFunction 
}); 

function successFunction() 
{ 
    requestsLeft--; 
    if (requestsLeft == 0) 
     doRedirectOrWhatever(); 
} 

이렇게하기 위해서는 반드시해야합니다. 내 예제에서는 json 응답을 기대하지만이 방법은 작동 할 필요가 없습니다.

var ajaxurls = ["Firsturl.ashx", "Secondurl.ashx"] 

function doAjax() 
{ 
    $.ajax({ 
     url: ajaxurls.shift(), // Get next url 
     dataType: 'json', 
     success: function(result) 
     { 
      if (result.redirectUrl) // or whatever requirement you set 
       /* redirect code goes here */ 
      else if (ajaxurls.length>0) // If there are urls left, run next request 
       doAjax(); 
     } 
    }); 
} 
doAjax(); 
관련 문제