Millerish
@Millerish

Почему success не отдает параметры?

Доброе время суток!

Почему console.log( 'ans', ans ) показывает ответ, а console.log( 'r', r ) показывает пустую строку? Я же не объявляю переменную, а использую r.

function captureAndUpload() {
    var r = '';
    html2canvas($("#PAINTING-DIAGRAMMA"), {
        background:'#fff',
        onrendered: function(canvas) {
            var imgData = canvas.toDataURL('image/jpeg');
            var url = 'loadImg.php';
            $.ajax({
                type: "POST",
                url: url,
                dataType: 'text',
                data: {
                    screen : imgData
                },
                success: function(response){
                    response = "" + response
                    var ans = response.substr(12);
                    r = ans;
                    console.log( 'ans', ans )
                },
                error:function(xhr, ajaxOptions, thrownError){
                    console.log( xhr.responseText )
                }
            });
        }
    });
    console.log( 'r', r )
}
  • Вопрос задан
  • 246 просмотров
Пригласить эксперта
Ответы на вопрос 2
@pudovMaxim
web-developer
Потому что js асинхронный. И когда вызывается console.log(r), по сути, запрос аякса еще не выполнен
Ответ написан
@vshvydky
function captureAndUpload(){
  return new Promise((resolve,reject)=>{
    html2canvas($("#PAINTING-DIAGRAMMA"), {
        background:'#fff',
        onrendered: function(canvas) {
            var imgData = canvas.toDataURL('image/jpeg');
            var url = 'loadImg.php';
            $.ajax({
                type: "POST",
                url: url,
                dataType: 'text',
                data: {
                    screen : imgData
                },
                success: function(response){
                    response = "" + response
                    var ans = response.substr(12);
                    console.log( 'ans', ans );
                    resolve(ans);
                },
                error:function(xhr, ajaxOptions, thrownError){
                    console.log( xhr.responseText )
                    reject(xhr.responseText);
                }
            });
        }
    });
}
captureAndUpload().then(r=>{
  console.log('r',r);
}).catch(error=>{
  console.log(error);
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы