>

우리가 상속 한 CRM을 개발 중입니다. 간단히 말해서-백그라운드에서 실행되어야하는 PHP 스크립트를 호출하는 버튼이 있으며 응답을 기다릴 필요가 없습니다.

request(idata+'transferInTimeExec.php',{
    sync: false,
    preventCache:true,
    method:'GET'
});

이제 transferInTimeExec.php  실행하는 데 1 시간이 걸리며, 채용 회사의 주간 작업 표를 처리하고 처리하며 많은 DB 작업을 수행하는 매우 복잡한 스크립트입니다.

Chrome 사용. 버튼을 눌러 실행할 때마다 모든 xhr 호출이 끝날 때까지 차단합니다. CRM은 "ajax heavy"이며 스크립트가 실행되는 동안 사용자가 아무것도 수행 할 수 없습니다. 다른 서브 페이지로 이동하면 시작된 프로세스가 완료 될 때까지 xhr 요청이 해결되지 않습니다. 새 브라우저 탭을 열어서 무언가를 시도하더라도 그렇게하지 않습니다. 스크립트가 실행되는 동안 다른 브라우저 (Firefox)에서 CRM을 열면 CRM을 사용할 수 있습니다.

네트워크 탭에서-첫 번째 통화는 보류 중이며 다른 Ajax 통화 대기에 대한 모든 후속 통화 대기 (모두 sync : false 있음)를 볼 수 있음

전체 로직을 PHP 함수 sleep(30) 로 교체했습니다.  같은 문제를 반환하기 전에 30 초 동안 아무 작업도 수행하지 않습니다.

onClick 내부에서 일반 자바 스크립트로 XHR을 사용해 보았습니다.  Dojo 메소드가 아닌 버튼 HTML 마크 업에 동일한 문제가 있습니다.

sync:true 를 대신하여 전체 프로젝트에서 잔인한 검색/바꾸기를 수행했습니다.   sync:false 로  -아무것도 바뀌지 않았습니다.

아이디어가 부족합니다. 어쩌면 여기있는 사람이 이것을 알아낼 수 있습니까? 동기화/비동기 용 글로벌 스위치가 있습니까? 아약스 문제가 아닌 경우 다른 무엇을 할 수 있습니까?

  • 답변 # 1

    스크립트 transferInTimeExec.php  아마도 세션을 사용하고 있습니다. 이 경우 다른 AJAX 호출이 시작되지 않고 세션 데이터를 덮어 쓰지 않도록이 AJAX 호출이 완료 될 때까지 기다리십시오. AJAX 호출을 비동기로 설정해도 동작이 변경되지 않습니다.

    이 스크립트를 실행하는 데 1 시간이 걸리면 UI에서 AJAX로 호출하는 것은 좋지 않습니다. 매시간 또는 매일 Cron을 설정하고 백엔드에서 모든 작업을 수행해야합니다. 물론 세션을 사용하는 경우 스크립트를 약간 조정해야합니다.

    수정

    session_write_close(); 를 사용할 수 있습니다  스크립트 상단에 이렇게하면 PHP에이 스크립트가 세션에 아무것도 쓰지 않으므로 다른 AJAX 호출은 세션을 자유롭게 사용할 수 있습니다. 그러나이 후에 세션에 아무 것도 쓰지 않도록주의하십시오. 오류가 발생할 수 있습니다.

  • 이전 python - 캔버스가있는 두 개의 별도 창에 텍스트를 인쇄하는 방법은 무엇입니까?
  • 다음 android - 다트에서 비동기 함수의 값을 사용하는 방법