我正在制作一个webapp。在其中的一部分,我想将js变量传递给php,以将本地保存的用户数据与互联网上的用户数据同步。
这是HTML代码:
<li><a onclick="sync();">Sync</a></li>
这是JavaScript函数:
function sync(){
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
console.log(xmlhttp.responseText);
}
}
xmlhttp.open("POST","sync.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
var tags = localStorage.getItem("tags");
var data = "tags="+tags;
xmlhttp.send(data);
}
这是php部分:
<?php
echo $tags;
console.log($tags);
return $tags;
?>
当我点击同步按钮时,这是我得到的错误:
Uncaught ReferenceError: sync is not defined (index):103
onclick
怎么了?我该怎么办?
答案 0 :(得分:1)
您很可能在子范围中定义所述函数而不是全局。快速解决方法是将其添加到窗口中:
(function () { // this is an example of what could cause it to be in a child scope
function sync () {
...
}
window.sync = sync;
})();
但我建议转而离开内联事件处理程序。
答案 1 :(得分:1)
问题是单击锚点时全局范围内不存在函数sync
。
onclick
和其他事件属性通常被认为是不好的做法,您应该使用JavaScript代码中的事件侦听器,如下所示:
var button = document.getElementById("sync");
button.addEventListener("click", sync, false);
注意:在DOM加载后初始化此脚本非常重要,最简单的方法是在关闭正文标记之前将其放置。
并改变你的HTML:
<li><a href="#" id="button">Sync</a></li>
您需要确保您的函数使用Event.preventDefault
,以便它不会触发浏览器窗口的刷新,例如:
function sync(e) {
e.preventDefault();
// Rest of your function
}
有关事件监听器的更多信息,请访问:https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener
存在一些浏览器兼容性问题,尤其是您必须注意的旧版Internet Explorer,该页面上提供了填充程序。
答案 2 :(得分:1)
执行以下操作:
1)将下面提到的js代码保存在你调用sync()函数的同一个文件中
<script type="text/javascript">
</script>
2)js代码如下:
function sync(){
console.log("hi");
}
如果你得到&#34; hi&#34;在控制台日志中,将上面的代码替换为您的代码。