无法在javascript中调用同步功能

时间:2014-03-12 14:40:30

标签: javascript php ajax

我正在制作一个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

怎么了?我该怎么办?

3 个答案:

答案 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;在控制台日志中,将上面的代码替换为您的代码。