【问题标题】:PHP echo Outputting JavaScript - script does not have same scopePHP echo 输出 JavaScript - 脚本没有相同的范围
【发布时间】:2010-12-18 04:58:44
【问题描述】:

我目前正在设计一个 HTML5 Canvas 应用程序,并且正在使用 Image Uploader,以便用户可以将本地图像上传到服务器,然后在画布上修改图像(因为对外部源的大量操作会给您带来安全异常) .

我包含了一些类似这样的 JS:

<script type="text/javscript">
    var editImage = new Image; // Global scope; not in a function
    function setupCanvas() {}
</script>

成功加载图像后,我会回显如下内容:

echo '
<script type="text/javascript">
    alert("'.$upload_image.'"); 
    window.editImage=new Image(); 
    window.editImage.src=\''.$upload_image.'\'; 
    alert(window.editImage.src);
    setupCanvas();
</script>'

现在我从 alert() 语句得到的输出是 $upload_image。但是当我检查 FireBug 时,它会说我在单独的脚本中全局声明的 editImage 变量仍然是原始图像源,而不是 $upload_image。此外,它会说我调用的 setupCanvas() 方法将是未定义的,尽管它在 GLOBAL 范围内。

我假设当我使用 PHP 执行此操作时,一定存在一些范围问题 - 有没有办法解决这个问题?

【问题讨论】:

  • 你确定JS在页面echo之前?
  • 很可能就是这样;我如何确保它在 JS 包含之后?我检查了 HTML post-PHP 操作,在之前的 JS 包含之后出现了来自 PHP 的添加脚本;这样就够了吗?
  • 我尝试包含一个 test.php: echo '';这似乎会产生一个未定义的变量错误 - 即使我将包含放在其他包含之后......虽然这可能是由于图像加载,但我仍然觉得这令人惊讶。
  • 不,PHP 与这里完全无关。 PHP 远离你的范围。所以,先不用 PHP 做所有的事情,使用预定义的图像等。调试它直到它运行良好,然后才让你的 JS 由 PHP 生成。明白了吗?
  • 好的,感谢您的帮助,我得到了部分工作!我将用 PHP 输出的 JS 复制到我回显的区域。这给出了相同的错误;所以这不是 PHP 问题。这是因为文档可能没有加载;所以我将其修改为: $(document).ready(function() { editImage=new Image(); editImage.src='graffpic/uploads/fracture_1292689775.jpg'; console.log(editImage.src); setupCanvas(); }) ;

标签: php javascript variables scope echo


【解决方案1】:

抱歉,cmets 中的代码块不可读,这就是我使用 JUST javascript 的方式:

$(document).ready(function() {
   editImage=new Image(); 
   editImage.src='http://graffpic/uploads/fracture_1292689775.jpg'; 
   console.log(editImage.src); 
   setupCanvas();           
});

唯一的问题是当我用 PHP 输出它时,它会说 $ 是未定义的 - 所以这很可能是一个加载问题 - 谁能给我更多关于这个和做什么的细节?我可以再次导入 jQuery 库,但这看起来很笨拙;或者我可以导入 $(document).ready() 所需的代码片段,这又很笨重。有什么帮助吗?

【讨论】:

  • 问题最终是我正在使用的 iFrame 中捕获输出.. 将输出重定向到其他地方并且它可以工作... 很抱歉造成混乱
【解决方案2】:

啊!我希望这实际上也是你的问题。不仅仅是您帖子中的错字,因为我一直在根据您的示例使用一些代码来挠头。不只是你的第一个代码块读取,

<script type="text/javscript">

没有

<script type="text/javascript">

是吗? (请注意第一行中“javascript”中缺少的“a”。)

【讨论】:

  • 对不起这个例子;我没有直接复制粘贴。但我拼写正确;现在将使用纯 JS 进行调试-现在将进行编辑。
  • 没关系,不用担心。它适合我没有完全阅读我正在看的东西,只是从复制和粘贴自己开始。让我们知道怎么回事。我在想,由于您正在处理图像,因此您可能需要等待window.onload,但无论如何您都不应该将setupCanvas 视为undefined,所以我不确定。
猜你喜欢
  • 2016-10-06
  • 1970-01-01
  • 1970-01-01
  • 2012-04-05
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多