계속하기 전에 canvas.toBlob ()을 기다리십시오.

스테판 D.

jquery ajax로 잘린 이미지를 업로드하고 싶습니다. 따라서 캔버스 요소에서 blob을 만들어 양식 데이터에 추가합니다. 지금까지 잘 작동하지만 동기화 / 비동기 문제가 있습니다. 웹에서 자바 스크립트 콜백을 검색했지만 이것이 일반적으로 올바른지 확실하지 않습니다. 문제는

return formData;

blob이 양식 데이터에 추가되기 전에 실행됩니다. 내 문제를 해결할 수있는 쉬운 해결책이 있다고 생각하지만 해결할 수 없습니다. 도와 주실 수 있습니다.

$.ajax({
    url: this.$upload.data('url'),
    method: 'POST',
    contentType: false,
    processData: false,
    cache: false,
    data: (function(_this) {
        var formData = new FormData();
        _this.getCroppedImage().toBlob(
            function(blob) {
                formData.append('file', blob, _this.file.name);
            },
            _this.file.type
       );
       $.each(_this.$element.data(), function(key, value) {
           formData.append(key, value);
       });
       return formData;
    })(this)
});

아는 것이 중요 할 수도 있습니다. 또한 모든 브라우저에서 toBlob 메서드를 사용할 수 있도록 https://github.com/blueimp/JavaScript-Canvas-to-Blob사용 합니다.

케빈 F

이를 수행하려면 promise 객체를 살펴보고 싶을 것입니다.이를 위한 좋은 라이브러리는 q.js입니다.

기본적으로 양식 데이터를 빌드 할 함수를 만든 다음 양식 데이터가 완료 될 때까지 기다립니다. 약속이 해결되면 "then"콜백을 통해 양식 데이터를 ajax 함수로 전달합니다. 그런 다음 ajax 호출이 실행됩니다.

function ajaxFn(){
    //result is your formData in this case
    getFormData().then(function(result){
        //this won't run until the promise resolves, aka formData is complete
        $.ajax({
            url: this.$upload.data('url'),
            method: 'POST',
            contentType: false,
            processData: false,
            cache: false,
            data: result
        });
    });

}

function getFormData(){
    var deferred = Q.defer();

    var formData = new FormData();

    $.each(_this.$element.data(), function(key, value) {
       formData.append(key, value);
    });

    _this.getCroppedImage().toBlob(
        function(blob) {
            formData.append('file', blob, _this.file.name);

            //this is what will get passed into your then function above
            deferred.resolve(formData);
        },
        _this.file.type
   );

    return deferred.promise;
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

계속하기 전에 NSNotification을 기다리십시오.

분류에서Dev

계속하기 전에 버튼 클릭을 기다리십시오.

분류에서Dev

VB.NET을 계속하기 전에 특정 프로그램이 열릴 때까지 기다리십시오.

분류에서Dev

돌아 오기 전에 응답을 기다리십시오.

분류에서Dev

초점을 잃기 전에 클릭을 기다리십시오

분류에서Dev

다음 작업을 수행하기 전에 jquery를 기다리십시오

분류에서Dev

Blob이 아닌 Blob-firestore Blob에 canvas.toBlob을 저장하는 방법은 무엇입니까?

분류에서Dev

계속하기 전에 소리가 끝날 때까지 기다리십시오.

분류에서Dev

계속하기 전에 범위의 값을 확인하십시오.

분류에서Dev

새로운 기능을 시작하기 전에 Ajax 기능이 완료 될 때까지 기다리십시오.

분류에서Dev

계속하기 전에 약속 함수에서 반환을 확인하십시오. 잘못된 접근?

분류에서Dev

작업을 수행하기 전에 내 프로그램을 잠시 기다리십시오.

분류에서Dev

추가 실행 전에 http.request 응답을 기다리십시오.

분류에서Dev

계속하기 전에 AngularJS에서 해결할 약속을 기다리는 중

분류에서Dev

네트워크 구성을 기다리기 전에 wicd를 시작하십시오.

분류에서Dev

루프를 계속하기 전에 속성이 참이 될 때까지 기다리십시오.

분류에서Dev

계속하기 전에 x 시간 펄스를 스트림에서 기다리십시오

분류에서Dev

계속하기 전에 약속을 기다리는 방법이 있습니까?

분류에서Dev

콜백을 보내기 전에 CountDownLatch를 사용하여 많은 스레드를 기다리지 마십시오.

분류에서Dev

코드를 계속하기 전에 다운로드 바가 나타날 때까지 기다리십시오.

분류에서Dev

오류 : '어떤'명령을 찾을 수 없습니다. 설치를 계속하기 전에 먼저 사용 가능한지 확인하십시오.

분류에서Dev

대답을 기다리지 말고 일괄 적으로 계속하십시오.

분류에서Dev

계속 진행하기 전에 채널 권한 (소유자) defaultrole을 확인하십시오.

분류에서Dev

일부 메서드에 대해 CommandTimeout을 계속 폐기하고 늘리십시오.

분류에서Dev

Swift에서 계속하기 전에 목적 C 함수의 결과를 기다리십시오.

분류에서Dev

계속하기 전에 Twitter의 API 제한이 재설정 될 때까지 기다리십시오.

분류에서Dev

vb. 계속하기 전에 두 번째 양식이 닫힐 때까지 기다리십시오.

분류에서Dev

doInBackground AsyncTask android를 계속 실행하기 전에 publishProgress 완료를 기다리십시오.

분류에서Dev

계속 진행하기 전에 모든 iOS 블록이 실행될 때까지 기다리십시오.

Related 관련 기사

  1. 1

    계속하기 전에 NSNotification을 기다리십시오.

  2. 2

    계속하기 전에 버튼 클릭을 기다리십시오.

  3. 3

    VB.NET을 계속하기 전에 특정 프로그램이 열릴 때까지 기다리십시오.

  4. 4

    돌아 오기 전에 응답을 기다리십시오.

  5. 5

    초점을 잃기 전에 클릭을 기다리십시오

  6. 6

    다음 작업을 수행하기 전에 jquery를 기다리십시오

  7. 7

    Blob이 아닌 Blob-firestore Blob에 canvas.toBlob을 저장하는 방법은 무엇입니까?

  8. 8

    계속하기 전에 소리가 끝날 때까지 기다리십시오.

  9. 9

    계속하기 전에 범위의 값을 확인하십시오.

  10. 10

    새로운 기능을 시작하기 전에 Ajax 기능이 완료 될 때까지 기다리십시오.

  11. 11

    계속하기 전에 약속 함수에서 반환을 확인하십시오. 잘못된 접근?

  12. 12

    작업을 수행하기 전에 내 프로그램을 잠시 기다리십시오.

  13. 13

    추가 실행 전에 http.request 응답을 기다리십시오.

  14. 14

    계속하기 전에 AngularJS에서 해결할 약속을 기다리는 중

  15. 15

    네트워크 구성을 기다리기 전에 wicd를 시작하십시오.

  16. 16

    루프를 계속하기 전에 속성이 참이 될 때까지 기다리십시오.

  17. 17

    계속하기 전에 x 시간 펄스를 스트림에서 기다리십시오

  18. 18

    계속하기 전에 약속을 기다리는 방법이 있습니까?

  19. 19

    콜백을 보내기 전에 CountDownLatch를 사용하여 많은 스레드를 기다리지 마십시오.

  20. 20

    코드를 계속하기 전에 다운로드 바가 나타날 때까지 기다리십시오.

  21. 21

    오류 : '어떤'명령을 찾을 수 없습니다. 설치를 계속하기 전에 먼저 사용 가능한지 확인하십시오.

  22. 22

    대답을 기다리지 말고 일괄 적으로 계속하십시오.

  23. 23

    계속 진행하기 전에 채널 권한 (소유자) defaultrole을 확인하십시오.

  24. 24

    일부 메서드에 대해 CommandTimeout을 계속 폐기하고 늘리십시오.

  25. 25

    Swift에서 계속하기 전에 목적 C 함수의 결과를 기다리십시오.

  26. 26

    계속하기 전에 Twitter의 API 제한이 재설정 될 때까지 기다리십시오.

  27. 27

    vb. 계속하기 전에 두 번째 양식이 닫힐 때까지 기다리십시오.

  28. 28

    doInBackground AsyncTask android를 계속 실행하기 전에 publishProgress 완료를 기다리십시오.

  29. 29

    계속 진행하기 전에 모든 iOS 블록이 실행될 때까지 기다리십시오.

뜨겁다태그

보관