我假设答案是:“这是不可能的,因为 php 是服务器语言而不是客户端语言”,但我希望比我更专家的人来说明这一点并最终列出所有可能的解决方法......
问题:当用户在不使用任何javascript的情况下在html 页面中“单击”或执行某种其他类型的操作(例如鼠标悬停)时,是否(完全)可以(仅)执行一个php 函数?
(PS 作为一种解决方法,我考虑访问包含要在客户端操作发生时执行的 php 代码的中间页面,然后根据需要进行重定向,但就传递 php 代码的结果而言,这并不简单。)
我假设答案是:“这是不可能的,因为 php 是服务器语言而不是客户端语言”,但我希望比我更专家的人来说明这一点并最终列出所有可能的解决方法......
问题:当用户在不使用任何javascript的情况下在html 页面中“单击”或执行某种其他类型的操作(例如鼠标悬停)时,是否(完全)可以(仅)执行一个php 函数?
(PS 作为一种解决方法,我考虑访问包含要在客户端操作发生时执行的 php 代码的中间页面,然后根据需要进行重定向,但就传递 php 代码的结果而言,这并不简单。)
一般来说没有。我可能想到的关于鼠标悬停的唯一解决方法是一个小的 1x1 透明背景图像,它由 PHP 脚本生成,并且仅在用户将鼠标悬停在某个元素上时才会显示。
html:
<div id="mouseover_php">execute php</div>
CSS:
#mouseover_php:hover {
background-image:url(/path/to/php-script)
}
php:
<?php
// your code
// set http headers to correct content type and to disable caching
// output 1x1 pixel transparent image
但是由于所有现代浏览器都使用预取和缓存(尽管这可能会受到设置 Cache Control 标头的影响),我当然不会将其作为鼠标悬停事件的毫无疑问的指标。因此,如果有的话,这将是一个非常不干净的黑客攻击。
关于点击:这里唯一可能的方法是加载一个中间页面,就像你建议的那样。就我而言,没有 AJAX 就无法实现这一目标。
如果不提出新请求,这是不可能的。
您必须使用链接将用户发送到新页面(或同一页面——只要发出新请求即可),或者您必须使用 AJAX 之类的东西。
实际上,我能想到一种非常 hack-ish 的方式。它并不完全漂亮,但它应该可以工作。
您可以使用 iframe 作为链接的目标。基本上,它不会在同一窗口或新窗口中打开链接,而是在隐藏的 iframe 中打开。
未经测试,但在理论上:
<iframe name="testframe" id="testframe"></iframe>
<a href="http://google.com" target="testframe">Test</a>
编辑:经过一些粗略的测试,看起来 chrome 不会遵守这一点。不过,IE9 似乎会在某种程度上。