Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中将2个函数与1个函数结合起来?_Javascript - Fatal编程技术网

如何在javascript中将2个函数与1个函数结合起来?

如何在javascript中将2个函数与1个函数结合起来?,javascript,Javascript,我正在创建一个函数,使用javascript将数据保存到后端。现在我需要在javascript中将两个函数和一个函数结合起来。因为我想点击一个按钮就可以运行这两个功能 第一个功能-第一个功能是单击按钮后,图像将显示在页面中,然后传递到后端执行保存功能 功能保存\u qr(表单){ html2canvas($(“#createImg”),{ onrendered:函数(画布){ var imgsrc=canvas.toDataURL(“image/png”); 控制台日志(imgsrc); $(“

我正在创建一个函数,使用javascript将数据保存到后端。现在我需要在javascript中将两个函数和一个函数结合起来。因为我想点击一个按钮就可以运行这两个功能

第一个功能
-第一个功能是单击按钮后,图像将显示在页面中,然后传递到后端执行保存功能

功能保存\u qr(表单){
html2canvas($(“#createImg”),{
onrendered:函数(画布){
var imgsrc=canvas.toDataURL(“image/png”);
控制台日志(imgsrc);
$(“#newimg”).attr('src',imgsrc);
$(“#img”).show();
var dataURL=canvas.toDataURL();
$.ajax({
类型:“POST”,
url:“?f=“+loc,
数据:{
imgBase64:数据URL
} 
}).done(函数(o){
console.log('saved');
}); 
} 
}); 
}
第二个函数
-此函数将传递到后端以执行插入表单数据函数

功能保存\u qr(表单){
var error_msg=新数组();
$(“#”+表单+”.blank”)。每个(函数(){
if($.trim($(this).val())==“”){
错误_msg.push(“The”+$(this.attr(“title”)+“不应为空。”);
}
});
var loc=getQueryVariable('loc');
var serialized=$('#'+form).serialize();
var extra='&action=save';
var form_data=序列化+额外;
如果(错误消息长度<1){
$.ajax({
键入:“POST”,
url:“?f=“+loc,
数据:表格数据,
beforeSend:function(){
show_overLay();
},
成功:功能(数据){
如果(数据){
控制台日志(数据);
隐藏覆盖(数据);
//$('#save').prop('disabled',true);
window.location=“?loc=“+loc;
}否则{
隐藏覆盖(数据);
}
}
});
}否则{
警报(错误消息加入(“\n”);
}
}
这意味着我想先执行第一个功能以显示图像,然后执行第二个功能。两个函数中使用相同位置后端的url。希望有人能指导我如何将这两个函数与1个函数结合起来。谢谢

注意:这两个功能如果分开执行,则可以工作

错误:


我是瞎了还是这么简单。将函数重命名为
save_qr1
save_qr2
(当前函数名称相同),并在新的
full_save_qr
函数中使用它们:

function full_save_qr(form) {
  save_qr1(form);
  save_qr2(form);
}
这些功能是同步进程。这意味着您的save_qr1将在save_qr2之前处理。如果希望两个函数之间有一个特定的时间,则需要使用类似于
setTimeout

function full_save_qr(form) {
  save_qr1(form);
  setTimeout(() => save_qr2(form), 1000);
}

只需添加全局变量,如
var isImageShow=false
。调用像这样包装代码

var isImageShow = false;
function save_qr(form) {
    if (!isImageShow) { 
        isImageShow = true; 
        // 1st function code 
    } else { 
        // 2nd function code 
    }
}

如果要检查
dataURL
上的条件,则将
dataURL
声明为全局变量。如果(!dataURL),则将条件更新为
。同时更新
var dataURL=canvas.toDataURL()
to
dataURL=canvas.toDataURL()
因此它将全局使用
声明的
数据URL

var dataURL = "";
function save_qr(form) {
    if (!dataURL) {             
        html2canvas($("#createImg"), { 
            onrendered: function(canvas) { 
                var imgsrc = canvas.toDataURL("image/png"); 
                console.log(imgsrc); 
                $("#newimg").attr('src', imgsrc); 
                $("#img").show(); 
                dataURL = canvas.toDataURL(); // removed var from here.
                $.ajax({ 
                    type: "POST", 
                    url: "?f=" + loc,
                    data: { 
                        imgBase64: dataURL 
                    } 
                }).done(function(o) { 
                    console.log('saved'); 
                }); 
            } 
        });
    } else { 
        // 2nd function code 
    }
}

只需添加全局变量,如
var isImageShow=false
。如果(!GetPropertyValue){GetPropertyValue=true;//1st function code}或者{//2nd function code}
谢谢@Karan回答我的问题,请像
那样调用包装代码。你能在下面写下来吗?如果正确的话,我可以给你打分。谢谢你的回答。如果你喜欢,你的答案也可以保存imgBase64:dataURL,对吗?你只是在一个函数中调用你的两个函数。因此,整个机制应该仍然有效。如果您有任何问题-请随时推荐以下内容,我们将尽力解决。请编辑答案,其中使用
dataURL
作为条件,并保留其值。