使用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> 
+0

首先,您的网址之间似乎存在一些差异。在这里的问题是'q = bruce',但是在错误中它是'q = @ bruce'。 – Mouser

+0

然而这些问题似乎是彼此无关的,这是我的猜测。我认为重定向页面没有加载包含'someFunction'的JS文件' – Mouser

+0

嗯,我没有注意到这种差异。 substr函数不能像我所期望的那样工作。 – erv

事实证明,问题是我无意中在我的页面上有几个元素与id相同。一旦我解决了这个问题,它就可以在Chrome中正常工作。有趣的是,它在FF中起作用,而不是在Chrome中起作用。

我要在这里野狩猎* wink *

Uncaught TypeError: someFunction() is not a function at HTMLInputElement.onclick (VM509 [email protected]:44)

这意味着该函数不在全局范围内。这意味着具有此功能的脚本块不存在。

确保包含someFunction的脚本块位于somepage.php中。

+0

它在Firefox中起作用,所以在那种情况下它就在那里。为什么Chrome不能检索它? – erv