2014-11-03 5 views
0

을 무시 나는 두 가지 기능 autosubmit()manualsubmit()다시 시작하거나 Ajax 요청

function autosubmit() { 
    $.post('action.php', $('#form').serialize(), function(data){ 
     $('#container').html(data); 
    }); 
} 

function manualsubmit() { 
    autosubmit(); 
} 

autosubmit()이 몸 부하에 호출을 가지고 있지만 언젠가는 manualsubmit()이 버튼을 다시 시도를 클릭하여 트리거 다음 containerload 데이터에 시간이 걸립니다. 서버로 전송 된 이전 아약스 요청을 중단하고 싶습니다. abort() 메소드를 구현할 수 없습니다.

+1

jquery abort()의 문제점은 무엇입니까? –

+0

$ .post 메서드를 사용하고 싶습니다. –

+0

'$ .post'의 결과와 함께'abort()'를 사용할 수 있기 때문에 당신의 요점은 보이지 않습니다. –

답변

1

$.post의 사용은 abort의 사용을 배제하지 않습니다. 그것은 $.ajax 그래서 당신이 이런 일의 중단 메서드를 호출 할 수 있습니다으로 jqXHR가 같은 객체 반환합니다 (이 방법을 사용할 수없는 등)이 만들어지고 AJAX 요청을 중지하지 않습니다

var previousRequest; 

function autosubmit() { 
    previousRequest = $.post('action.php', $('#form').serialize(), function(data){ 
     $('#container').html(data); 
    }); 
} 

function manualsubmit() { 
    previousRequest && previousRequest.abort(); // abort the request, if there was one 
    autosubmit(); 
} 

참고 만 반환 처리기가 실행중인 요청에 대해 처리합니다.

+0

은 manualsubmit()의 첫 줄을 정확하게 사용하고 싶습니까? 나는 그것이()에 있어야한다고 생각한다. –

+0

'previousRequest && previousRequest.abort();' –

+0

이 라인은 먼저 previousRequest 변수가 정의되어 있는지 확인한 다음, previousRequest 변수에 'abort'를 호출한다. –

1

이 예에서 살펴 보자 :가 전송 된 후에는

var currentRequest = null; 
currentRequest = $.ajax({ 
    url: 'action.php', 
    type: 'post', 
    data: {your_fields_params}, 
    beforeSend: function(){ 
     if(currentRequest != null) 
      currentRequest.abort(); 
    }, 
    success: function(){ 
    } 
}); 
+0

당신의 대답은 정확하지만 $ .post –

1

당신은 아약스 요청을 취소 할 수 없습니다. JS에서 반환 된 값만 무시할 수 있습니다.

당신은 반환 값을 보여주는 취소 .data를 사용할 수 있습니다

function autosubmit(){ 
    $body = $("body"); 
    if($body.data('autosubmit') !== true){ 
    $.post('action.php', $('#form').serialize(), function(data){ 
     if($body.data('autosubmit') !== true) $('#container').html(data); 
    }); 
    } 
} 

function manualsubmit(){ 
    $("body").data('autosubmit',true); 
    $.post('action.php', $('#form').serialize(), function(data){ 
    $('#container').html(data); 
    }); 
} 

설명 : manualsubmit()가 호출되면, 그것은 jQuery의 .data와 문서의 본문에 'autosubmit' => true을 추가합니다. autosubmit()이 호출되거나 해당 ajax 요청이 반환되면 데이터를 요청하거나 제시하기 전에 앞서 언급 한 값이 없음을 확인합니다.

관련 문제