2014-05-20 3 views
4

아약스를 사용하여 여러 양식을 제출하려고했지만 하나씩 보내려면 첫 번째 아약스를 완료/성공한 후 두 번째 아약스를 보내야합니다. 내 스크립트는 다음과 같습니다.각 하나씩 아약스 요청을 제출하십시오()

<form> 
<input type="text" name="name" value="john doe" size="60"> 
<input type="text" name="age" value="23" size="2"> 
</form> 

<form> 
<input type="text" name="name" value="Alex" size="60"> 
<input type="text" name="age" value="24" size="2"> 
</form> 

<button>Submit</button> 


<script> 
function post_form_data(data) { 
    $.ajax({ 
     type: 'POST', 
     url: 'https://members.lelong.com.my/Auc/Member/Feed/feed.asp', 
     data: data, 
     success: function() { 
      console.log('Success'); 
     }, 
     error: function() { 
      console.log('error'); 
     } 
    }); 
} 

$('button').on('click', function() { 
    $('form').each(function() { 
     post_form_data($(this).serialize()); 
    }); 
}); 
</script> 

enter image description here

+0

내가 뭔가를 누락하지 않는 한, 당신은 바로 트랙에있을 것 같다. 무슨 일있어? 오류가 있습니까? – Cerbrus

+0

success 함수에서 .each() 호출 post_form_data를 사용하는 대신 배열에 제출해야하는 양식을 추가하고 전송 된 양식을 제거한 다음 배열이 비어있을 때까지 삭제하십시오. –

+0

'async : false;' – rps

답변

2

당신은 추가 할 수 있습니다

비동기 : 거짓

가 순차적으로 확인합니다.

$.ajax({ 
    type: 'POST', 
    url: 'https://members.lelong.com.my/Auc/Member/Feed/feed.asp', 
    data: data, 
    async :false , 
    success: function() { 
     console.log('Success'); 
    }, 
    error: function() { 
     console.log('error'); 
    } 
}); 

참고 : - 비동기 : 거짓 논리적 ajaxified 요청의 동작을 거절 할 수 있습니다. 우리는 필사적으로 필사적으로 필요할 때까지 사용을 꺼립니다.

+1

두 줄의'++ i'는 버그가 있습니다 :-) –

+0

이 수정되었습니다. –

+1

대부분의 경우 비동기 호출을 사용하는 것이 나쁜 생각 인 이유를 설명하는 메시지를 추가하거나 경고해야합니다. –

5

이 작업을 시도 할 수 있습니다 :

function post_form_data(data,cache,i) { 
    $.ajax({ 
     type: 'POST', 
     url: 'https://members.lelong.com.my/Auc/Member/Feed/feed.asp', 
     data: data, 
     success: function() { 
      console.log('Success'); 
      i++; 
      post_form_data(cache.eq(i).serialize(),_cached,i); 
     }, 
     error: function() { 
      console.log('error'); 
     } 
    }); 
} 

$('button').on('click', function() { 

    var _cached=$('form'); 
    post_form_data(_cached.eq(0).serialize(),_cached,0); 

}); 
1

당신은 함수에서 약속 인터페이스를 반환, 배열에 데이터를 요청 넣어 done/then or always을 사용할 수

function post_form_data(data) { 
    return $.ajax({ 
     type: 'POST', 
     url: '/echo/html', 
     data: data, 
     success: function() { 
      console.log('Success'); 
     }, 
     error: function() { 
      console.log('error'); 
     } 
    }); 
} 

$('button').on('click', function() { 
    var requests = $('form').map(function() { 
     return $(this).serialize(); 
    }).get(); 
    var i = 0; 
    if (requests.length) { 
     makeRequest(requests, i); 

    } 
}); 

function makeRequest(requests, i) { 
    var iPromise = post_form_data(requests[i]); 
    if (i < requests.length - 1) { 
     iPromise.done(makeRequest(requests, ++i)) 
    } 
} 
관련 문제