2016-04-24 35 views
1

我有一個鏈接,當頁面被調用或刷新時,運行。在頁面加載/刷新時激活OnClick

由於這是設置爲執行onclick,這不應該發生。

我有一個偷偷摸摸的懷疑,因爲我已經在href中留下了空路徑,它可能會導致問題,但添加文件位置不會改變結果。

<a href="" onClick="<?php exec('sudo python /var/www/html/lightson.py'); ?>"><img src="lightm.png" width="128" height="128"></a> 
+0

爲什麼在你的代碼任何有關這個問題是這樣的行'的「>'...? – webeno

+0

除非你確定答案,否則告訴我爲什麼不是? –

+0

我假設你想要運行的代碼是在'lightson.py'裏面,這不是你粘貼的這個文件,如果是這樣,我不明白你爲什麼不只是點擊重新加載... – webeno

回答

1

編輯:我想給一些信貸@克里斯,因爲他是很好的指出了一個關鍵點in his answer你混合客戶端和服務器端代碼在這裏。他還確認了PHP代碼將如何執行的事實,無論我將其稱爲下面的假設和猜測,當然事實證明這是事實。

下面是我原來的答覆:


我與exec功能沒有經驗,但不知何故,我的直覺告訴我,它會執行不管它是一個HTML文件內。實際上,它就像使用PHP的任何函數一樣,實際上並不需要它在HTML文件中被正確格式化,它仍然會運行(當然,除非它被註釋掉了),所以這就是它每次都會調用它的原因。 ..

如果您使用AJAX代替或使用其他方式加載外部文件,而不是PHP調用(服務器),則考慮使用返回單擊事件處理程序代碼(客戶端)的onclick

例子:

<a href="" onClick="myFunc()"><img src="lightm.png" width="128" height="128"></a> 

的AJAX調用:

function myFunc() { 
    $.ajax({ 
    url: "/var/www/html/lightson.py", 
    // rest of the AJAX magic 
    }); 
} 
+0

那麼我明白爲什麼它現在正在頁面加載運行。但是用AJAX做這件事意味着我需要在Python文件中編寫更多代碼來監聽端口上的web處理程序等等等等,所以對我來說不是最好的方式,但是謝謝。 –

2

您在這裏混合了客戶端和服務器端代碼。 全部 PHP將在您的頁面呈現時進行評估(除非有像if語句這樣的控制結構來阻止它)。

您只能將JavaScript放入onclick事件中。如果你想在單擊某個元素時觸發服務器端代碼,則需要使用AJAX。

+0

我打算在我看到你的帖子時鍵入我的答案,這幾乎是完全一樣,除了我做了一些假設,實際上結果是真的...... :) – webeno