从JavaScript中的变量获取返回值
我有一个JavaScript函数,可以检查图像是否为空,并调用该函数将图像转换为base64字符串,但在转换图像后,我也无法返回始终显示未定义的变量值。updateUserDetails这是一个onclick函数,请帮我解决它从JavaScript中的变量获取返回值,javascript,jquery,Javascript,Jquery,我有一个JavaScript函数,可以检查图像是否为空,并调用该函数将图像转换为base64字符串,但在转换图像后,我也无法返回始终显示未定义的变量值。updateUserDetails这是一个onclick函数,请帮我解决它 var userImgData; function updateUserDetails() { if (userImgData === "undefined") { ImgData = (document.getElementById("user
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
?@mhodgesimg.onload
是异步的,调用函数而不是返回值是dupe中建议的解决方案。