使用PHP自定义URI路由 - 搞砸了onclick javascript调用

时间:2017-10-08 10:45:14

标签: javascript php apache .htaccess routing

我正在使用WAMP堆栈,并且我已经从我在网上找到的代码拼凑了一个自定义路由功能。这个想法是允许用户将他们的(或任何)用户名添加到网站根URL的末尾,并且路由器(index.php)将提取该用户名并提供定制的主页。在Firefox中一切正常,但在谷歌浏览器中,路由似乎搞乱了浏览器中的javascript函数调用。因此,html元素onclick=someFunction()会在错误的网址中查找someFunction()

因此,例如,假设用户浏览我的网站,并将其用户名附加到网址,例如 - 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 somePage.php?q=@bruce: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路由的stackoverflow答案中复制了这个意思):

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>

2 个答案:

答案 0 :(得分:0)

我在这里进行狂野狩猎 * wink *

  

未捕获TypeError:someFunction()不是HTMLInputElement.onclick中的函数(VM509 somePage.php?q = @ bruce:44)

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

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

答案 1 :(得分:0)

事实证明问题是我无意中在我的页面上有几个元素与id相同。一旦我解决了这个问题,它就开始在Chrome中运行良好。有趣的是它最初在FF而不是Chrome中起作用。