2017-10-08 64 views
0

我正在使用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

回答

0

事實證明,問題是我無意中在我的頁面上有幾個元素與id相同。一旦我解決了這個問題,它就可以在Chrome中正常工作。有趣的是,它在FF中起作用,而不是在Chrome中起作用。

0

我要在這裏野狩獵* wink *

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

這意味着該函數不在全局範圍內。這意味着具有此功能的腳本塊不存在。

確保包含someFunction的腳本塊位於somepage.php中。

+0

它在Firefox中起作用,所以在那種情況下它就在那裏。爲什麼Chrome不能檢索它? – erv