【发布时间】: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