첫 번째 ajax 호출이 완료될 때까지 두 번째 ajax 호출 대기 금지
페이지 로드 시 두 개의 아약스 콜을 실행하고 있습니다.데스크톱 브라우저에서 페이지를 열면 둘 다 예상대로 작동합니다.
그러나 안드로이드 브라우저(예: 크롬)에서 같은 페이지를 열면 두 번째 아약스 함수의 응답이 비동기성의 목적을 다소 무시하는 첫 번째 아약스 함수의 완료를 기다리고 있음을 알 수 있었습니다.둘 다 동시에 실행되지만 두 번째 함수는success
는 첫 첫째이된만다이다tfers째y된'lxxsuccess
기능.
스크린샷
안드로이드 브라우저가 아닌 데스크톱 브라우저에서 작동한다는 사실은 안드로이드에서 동시 비동기 호출을 차단하는 일종의 설정이 있을 것이라는 생각이 들게 합니다.
만약 그렇다면, 제가 그것을 비활성화할 수 있을까요?내 코드는 다음과 같습니다.
$(function(){
var intervalID = window.setInterval(function(){
doAjax(); // this is the function which is waiting for completion of first ajax call
}, 2000);
// the first ajax call
$.ajax({
type:'post',
url:'progress-insert.php', // basically is meant for insertion of records into db
success:function(data)
{
clearInterval(intervalID);
}
});
function doAjax()
{
$.ajax({
type:'post',
url:'progress-update.php', // basically returns how many records have been inserted so far
success:function(data)
{
// do something
}
});
}
});
현대 브라우저에서 동시에 연결할 수 있는 수에 대한 정보를 제공하는 브라우저 스코프를 가리키는 답변이 있습니다.한계에 도달했는지 여부를 테스트하는 한 가지 아이디어는 두 엔드포인트를 서로 다른 도메인에 호스팅하는 것입니다.브라우저가 작동하면 브라우저가 도메인당 1회의 호출을 제한한다는 것을 알 수 있지만 브라우저 범위 목록에서는 그렇지 않은 것으로 보입니다.
당신의 코드를 로컬로 실행해 보았으나 당신이 설명하고 있는 것과 같은 동작(Xcode iPhone 시뮬레이터 iOS7 및 모바일 사파리 사용)을 보지 못했습니다.
그리고, 당신은 두명이 있는것처럼 보입니다.$(function(){
설정, 하나는 다른 하나로 포장됩니다.아마 그걸 고쳐서 변화를 가져올지...
유감스럽게도 모든 브라우저의 자바스크립트 구현은 싱글스레드 방식입니다. 즉, 비동기 호출은 서버에 대한 비동기식이지만 동일한 자바스크립트에 대한 비동기식이므로 이전 요청을 기다립니다.이를 극복하기 위해 할 수 있는 일은 요청 상태가 200 Ok / Success가 아닌 경우 변수에서 요청을 푸시하는 것입니다. 동일한 기능에 대해 더 이상 호출하지 마십시오. 샘플 코드는 다음과 같습니다.
requests.push($.ajax({
type:'post',
url:'progress-update.php', // basically returns how many records have been inserted so far
success:function(data)
{
for(var i = 0; i < requests.length; i++)
requests[i].abort();
}
}));
이 완전한 접근 방식은 당신에게 도움이 될 것입니다.
CASE A ...한 번에 한 명의 아약스
<script type="text/javascript" >
//Global Variable
$.numx={loaded:false, timerx:0 }
// Document Ready
jQuery(function ($) {
// button click to insert
$("#button_click").on("click", function(){
//Ajax call Insert...myabe help you the insert returns some in json
$.getJSON( 'progress-insert.php', function(json) {
//the waiting function for insert is ready
$.numx.timerx=setInterval("waiting_insert()",50);
if(json!=null){
// set to the global variable the insert is ready..and pass to continue
$.numx.loaded=true;
// paste another actions to perform...
}
});
});
});
function waiting_insert(){
if( $.numx.loaded==true){
// tell to the waiting no more waiting
clearInterval($.numx.timerx);
// HERE perform the second ajax progress_update.php
}
}
</script>
CASE B - 많은 AJAX가 설정된 간격을 제거하고 삭제합니다.interval and execute는 같은 함수에서 원하는 만큼 많은 ajax 호출이 있습니다...이것처럼.
<script type="text/javascript" >
// window load .. is charged in event load of page
$(window).load(function(){
// two ajax calls at the same time
$.ajax({
type:'post',
url:'progress-insert.php',
success:function(data)
{
//do something
}
});
$.ajax({
type:'post',
url:'progress-update.php', // basically returns how many records have been inserted so far
success:function(data)
{
// do something
}
});
});
</script>
jQuery 1.8 현재 사용 중인 Jquery 버전을 확인하십시오. sync: false는 이전 버전 비동기 false에서 더 이상 사용되지 않거나 $.ajaxSetup() 호출 동기화의 일부처럼 global로 설정되었을 수 있습니다...
이것은 당신의 php 파일에 세션을 쓰는 것 때문이라고 생각합니다.
사용하다
session_write_close(세션)
$_SESSION에 편지를 쓴 후
당신을 도와주길 바랍니다.
언급URL : https://stackoverflow.com/questions/20567962/prevent-second-ajax-call-from-waiting-till-completion-of-first-ajax-call
'sourcecode' 카테고리의 다른 글
구글 스프레드시트에 AJAX 게시 (0) | 2023.09.06 |
---|---|
Java에서 SQL을 실행할 때 SQL 구문의 오류가 발생했지만 HeidiSQL에서는 발생하지 않음 (0) | 2023.09.06 |
PowerShell 스크립트에서 실행 파일 .exe 파일을 생성하시겠습니까? (0) | 2023.09.06 |
mysql에 로그인할 때 사용 권한이 거부되었지만 cmd digital ocean에서 로그인할 수 있음 (0) | 2023.09.06 |
jQuery UI 대화상자가 열려 있는지 탐지 (0) | 2023.09.06 |