从JavaScript中的变量获取返回值

从JavaScript中的变量获取返回值,javascript,jquery,Javascript,Jquery,我有一个JavaScript函数,可以检查图像是否为空,并调用该函数将图像转换为base64字符串,但在转换图像后,我也无法返回始终显示未定义的变量值。updateUserDetails这是一个onclick函数,请帮我解决它 var userImgData; function updateUserDetails() { if (userImgData === "undefined") { ImgData = (document.getElementById("user

我有一个JavaScript函数,可以检查图像是否为空,并调用该函数将图像转换为base64字符串,但在转换图像后,我也无法返回始终显示未定义的变量值。updateUserDetails这是一个onclick函数,请帮我解决它

var userImgData;
function updateUserDetails() {

   if (userImgData === "undefined") {

        ImgData = (document.getElementById("userProfileImage"));
        getUserBase64Image(ImgData.src)
    }
  updateDetails(userImgData)
}

function updateDetails(userImgData )
{
    //i am calling ajax to update
}

function getUserBase64Image(img) {

var i = img;
var canvas = document.createElement('canvas'),
    ctx = canvas.getContext('2d'),
    img = new Image();
img.onload = function () {
    canvas.width = img.width;
    canvas.height = img.height;

    if (canvas.width > canvas.height) {
        canvas.style.width = "320px";
    } else {
        canvas.style.height = "300px";
    }

    ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
    var dataURl = (canvas.toDataURL('image/jpeg'));
     userImgData = dataURl.replace("data:image/jpeg;base64,", " ")

    return userImgData ;
}
img.src = img;
}

onload函数是异步的,您可以使用回调解决此问题,如下所示:

 function updateDetails(customerImgData,CB)
    {
      //i am calling ajax to update
     }

      function getUserBase64Image(img) {

    var i = img;
     var canvas = document.createElement('canvas'),
    ctx = canvas.getContext('2d'),
    img = new Image();
    img.onload = function () {
    canvas.width = img.width;
    canvas.height = img.height;

    if (canvas.width > canvas.height) {
        canvas.style.width = "320px";
    } else {
        canvas.style.height = "300px";
    }

    ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
    var dataURl = (canvas.toDataURL('image/jpeg'));
     userImgData = dataURl.replace("data:image/jpeg;base64,", " ");

     CB(userImgData);

    return userImgData ;
  }
 img.src = img;
}

function updateUserDetails(imageData){
      //you will get image data here in variable "imageData",
      //put your code here.
}

updateUserDetails(customerImgData,updateUserDetails);//function call.

仔细想想,您在哪里等待返回值?例如,您在哪里调用onload事件处理程序?未定义的
具体变量是什么?您在哪里定义它?您永远不会调用此代码中的任何地方的
updateUserDetails()。如果(userImgData==undefined)
什么是
customerImgData
?@mhodges
img.onload
是异步的,调用函数而不是返回值是dupe中建议的解决方案。