Javascript 没有实际事件的Twitter事件触发器

Javascript 没有实际事件的Twitter事件触发器,javascript,php,twitter,web,Javascript,Php,Twitter,Web,我的代码面临一个棘手的问题,希望在这方面得到一些帮助。下面是我的代码片段: <a href="https://twitter.com/share" class="twitter-share-button" data-url="http://www.myurl.com/" data-text="My text" data-via="Via">Tweet</a> <script>!function(d,s,id){var js,fjs=d.getElementsB

我的代码面临一个棘手的问题,希望在这方面得到一些帮助。下面是我的代码片段:

<a href="https://twitter.com/share" class="twitter-share-button" data-url="http://www.myurl.com/" data-text="My text" data-via="Via">Tweet</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>

<script>
    twttr.events.bind( 
          'tweet', 
              function (ev) {

        <?php
        $file = 'file.txt';
        $id = trim($_GET["id"]);
        $data = array("ID:$id", "CURRENT POSITION:$position", 'Twitter');
        file_put_contents($file, implode(" ",$data).PHP_EOL,FILE_APPEND);
        ?>
                            }
                    );
</script>

!函数(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http://.test(d.location)'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}(document,'script,'twitter wjs');
twttr.events.bind(
“推特”,
功能(ev){
}
);
我不明白为什么每次页面加载时都会触发我的函数(ev)。它应该只在推特发布后触发。有人知道问题出在哪里吗?

函数不会触发,PHP会触发。在浏览器看到PHP之前,PHP在服务器上进行评估。事实上,浏览器不知道如何使用PHP。这里发生的是,用户加载页面,由PHP处理,执行PHP代码,由于没有输出任何内容,因此函数为空。浏览器看到的代码是:

<script>
twttr.events.bind( 
      'tweet', 
          function (ev) {

                        }
                );
</script>

twttr.events.bind(
“推特”,
功能(ev){
}
);

如果您在浏览器中检查源代码,您应该会看到该函数是空的。

谢谢,收到了。也许你可以帮助我使用AJAX编写这个PHP?你的PHP可以工作,但它必须在另一个文件中。您可以将它放在一个名为
tweet.php
的文件中,然后让您的函数对
/tweet.php?id=
进行AJAX调用,但调用的确切方式取决于您使用的库的类型。大多数人使用jQuery来完成这类事情;您可以查看其文档以了解更多信息。不过,要小心恶意用户故意使用非常大的ID来让服务器写入巨大的文件。我也使用jQuery。谢谢,我会尽力让它工作的。有没有一种方法可以保护我自己免受“恶意的人故意使用非常大的ID来让你的服务器写巨大的文件”?我不知道你期望的最长ID有多长,但一种简单的方法是快速长度测试。如果ID的长度超过20-30个字符,只需
die()
。另外,在PHP中,
$location
变量来自哪里?你到底想记录什么?为什么?我明白了。。。您可能还想查看一个将您的ID映射到当前位置的数据库。祝你好运别忘了标记一个被接受的答案;P