【问题标题】:Share same variable among multiple js scripts - one has .ready function and other doesn't在多个 js 脚本之间共享相同的变量 - 一个具有 .ready 函数,另一个没有
【发布时间】:2016-05-04 12:08:01
【问题描述】:

我有 2 个 js 脚本:

 <script type="text/javascript">

 function capture(){
var canvas = document.getElementById('canvas');
var video = document.getElementById('video');
canvas.getContext('2d').drawImage(video, 0, 0, video.videoWidth, video.videoHeight);
var img = canvas.toDataURL("image/png");
alert(img);
}
</script>
<script type="text/javascript"> 
 $(document).ready(function() { 

 $(".post").click(function() { alert(img);
 var level = document.getElementById('level');
 var language = document.getElementById('language');
 var textac = document.getElementById('textac');
 var decribac = document.getElementById('decribac');
 $.ajax({
 type: "POST",
url: "love.php",

data: {img: img, language: language, level: level, decribac:decribac, textac: textac },
  cache: false,
  success: function(data){

   }});
     window.location.replace("love.php");

   });
   });
   </script>

他们所做的是第一个点击“捕获”制作视频缩略图并将其放入画布并保存 var img。而另一个点击另一个按钮“发布”则通过 ajax 发布所有内容,包括图像 base64 编码字符串。我的问题是,当我尝试单击“发布”控制台注销时

-  404 Uncaught ReferenceError: img is not defined

而且我不知道为什么好像我在第一个脚本中提醒它它会正确地提醒但第二个不知道它。如果我将捕获函数放在

   $(document).ready(function(){..});

然后它确实工作并且控制台说 - 捕获功能未定义。那也很奇怪。如果我不放第二个按钮处理程序,它不会在点击时做任何事情。所以我需要把它们放在自己的脚本中——一个有 .ready 函数,一个没有。现在我无法将 img var 发送到第二个脚本以通过 ajax 将其发送到 php 脚本。帮助。

【问题讨论】:

  • img 是什么?它必须是globalpassed as argument 才能被其他methods/functions 访问...
  • 我需要在 clecked 按钮 '.post' 甚至处理程序中访问它才能通过 AJAX 传递它

标签: javascript jquery ajax variables share


【解决方案1】:

您在函数中定义该变量:

function capture(){
    //...
    var img = canvas.toDataURL("image/png");
    //...
}

所以它只存在于该函数的范围内。如果需要全局,则全局定义:

var img;

function capture(){
    //...
    img = canvas.toDataURL("image/png");
    //...
}

这会将它附加到 window 对象,在整个窗口范围内的其他代码可以访问它。

【讨论】:

  • 调用capture 并返回datatURL 会更好,因为它不需要global-variable
  • @Rayon:我倾向于同意,但在发布的代码中,capture() 甚至没有被调用。所以我们并不真正了解整体结构。在这种情况下,避免全局范围可能需要重新设计。
  • 我已在捕获函数之前将变量设置在最顶部 - 并且 ajax 调用中的警报显示它未定义。我想知道我做错了什么 - 从捕获函数返回 var img 的想法似乎很好 - 但我不知道当我需要它时如何“要求”它。换句话说 - 如何将它完全返回给 ajax 调用?
  • @DonaldaDonalda:你能用当前代码更新问题吗?
  • 我猜你永远不会调用capture,这就是img仍然是undefined的原因..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-14
  • 1970-01-01
  • 2019-07-11
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
相关资源
最近更新 更多