使用PHP自定义URI路由 - 使用onclick javascript调用
我正在使用WAMP堆栈,并将我在线上找到的代码中的自定义路由功能拼凑在一起。这个想法是允许用户将他们(或任何)用户名添加到网站根URL的末尾,路由器(index.php)将提取该用户名并提供定制的主页。一切工作正常在Firefox中,但在谷歌浏览器路由似乎搞乱浏览器中的JavaScript函数调用。因此,html元素onclick=someFunction()
在错误的URL处查找someFunction()
。使用PHP自定义URI路由 - 使用onclick javascript调用
因此,例如,说用户浏览到我的网站,并将他们的用户名附加到URL,如 - www.example.com/@bruce
。路由功能(参见下面的index.php)重定向到www.example.com/somePage.php?q=bruce
。为Bruce定制的页面已经发布,但是当Bruce点击一个含有onclick
事件的元素时,Chrome会抛出一个错误:Uncaught TypeError: someFunction() is not a function at HTMLInputElement.onclick (VM509 [email protected]:44)
任何想法如何解决此问题,以便我仍然可以路由我的用户?
的index.php:
<?php
//Router
$uri = $_SERVER['REQUEST_URI'];
$user = "";
if(strpos($uri, "@") > 0) {
$user = substr($uri, strpos($uri, "@"));
}
//do a validation on the user name before redirecting
header('Location: somePage.php?q=' . $user); //hardcode url here on deployment
die();
?>
这是我的.htaccess文件,如果是相关的(我复制从PHP路由一个计算器答案pasta'd此):
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule^index.php [QSA,L]
编辑补充脚本路径在我的somePage.php万一是导致问题的情况下:
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>SomePage</title>
<link rel="stylesheet" href="./somePage.css">
<script src="./somePage.js"></script>
</head>
事实证明,问题是我无意中在我的页面上有几个元素与id
相同。一旦我解决了这个问题,它就可以在Chrome中正常工作。有趣的是,它在FF中起作用,而不是在Chrome中起作用。
我要在这里野狩猎* wink *。
Uncaught TypeError: someFunction() is not a function at HTMLInputElement.onclick (VM509 [email protected]:44)
这意味着该函数不在全局范围内。这意味着具有此功能的脚本块不存在。
确保包含someFunction
的脚本块位于somepage.php
中。
它在Firefox中起作用,所以在那种情况下它就在那里。为什么Chrome不能检索它? – erv
首先,您的网址之间似乎存在一些差异。在这里的问题是'q = bruce',但是在错误中它是'q = @ bruce'。 – Mouser
然而这些问题似乎是彼此无关的,这是我的猜测。我认为重定向页面没有加载包含'someFunction'的JS文件' – Mouser
嗯,我没有注意到这种差异。 substr函数不能像我所期望的那样工作。 – erv