2012-07-17 36 views
0

我試圖通過向我的JavaScript函數發送一個變量來執行PHP腳本中的JavaScript函數,然後它將返回響應。我希望PHP腳本只回應javascript函數的響應,所以當客戶端查看我的php文件的源代碼時,他只能看到javascript函數的響應,而不是javascript源代碼。從PHP執行JavaScript函數並返回響應

例如,

我有一個JavaScript函數調用驗證(),和稱爲check.php的PHP文件。客戶端調用使用像這樣的GET方法

功能,www.myserver.com/check.php?value=test

我再想check.php給送過來的變量$值到我的javascript函數驗證(),來執行以下,

響應=驗證($值)

然後JavaScript以值響應返回到我的PHP腳本,並將其存儲一個變量$響應內,然後它會響應$響應。所以當我查看源代碼時,我只能看到變量答案中的內容。

我找不到一個簡單的方法來做到這一點:S。如果我使用AJAX,我需要在HTML中使用div,但重要的是隻有源代碼中顯示$ response的內容?

有人能指出我應該使用哪些PHP函數嗎?謝謝!

+0

您試圖運行有效負載。 – 2012-07-17 05:11:51

回答

2

PHP通常運行在服務器端,而Javascript通常運行在客戶端(在瀏覽器中)。

在普通模型中,客戶端向服務器發出請求,服務器響應。在這種情況下,PHP代碼不可能直接「調用」JavaScript函數。

那麼你的問題的解決方案是什麼?

爲了優先:

  1. 第一,最好的辦法是重新設計,這樣你就不需要在PHP中調用JavaScript validate()功能。例如,將Javascript邏輯移植到PHP。

  2. 如果無法端口,請在服務器端運行Javascript。 Node.js在Linux和Windows的服務器端運行;如果你有Windows/IIS,更簡單的選擇是通過ASP classic提供Javascript,當然,在當前的Windows服務器上仍然可用。 PHP程序可以通過curl簡單地請求本地的Javascript資源;服務器調用邏輯並返回結果。在通常情況下,Javascript不需要在同一臺服務器上運行。

  3. 最後,如果這不是一個選項,您可以讓瀏覽器代表服務器執行validate()。 PHP可以在JavaScript腳本塊中向瀏覽器發出驗證函數。 PHP也可以發出需要驗證的東西 - 一個數據包,或者任何它。然後瀏覽器可以在該對象上使用validate(),並通過AJAX將消息發佈到PHP以報告結果。但是,這裏存在一個安全問題 - 請記住客戶端不在您的控制範圍內,因此有可能會有人破壞客戶端驗證邏輯並導致客戶向PHP服務器報告錯誤結果。你不能指望tihis。

因此,您需要在事務中嵌入某種數據完整性檢查 - 您可以通過某種方式確保客戶端JavaScript未被修改。這將是艱難的。

+0

明智的答案 - 謝謝。此刻我正在使用node.js來運行JavaScript服務器端。我知道這不是一個理想的解決方案,但目前我沒有時間重新編寫JavaScript代碼。當我這樣做時,我將擺脫node.js並將JavaScript文件轉換爲PHP函數。再次感謝。 – rusty009 2012-07-25 15:05:31

0

你不應該起訴任何功能:P

然而,儘管這是一個看似可怕的方式做了驗證,你可以做到以下幾點:

  • 有JavaScript的輸出到HTML文件。 (把它放在容易找到的地方)
  • 使用fopen打開一個URL,其中包含你的參數,這個URL將被js函數拾取。
  • 讓您的PHP函數解析HTML文件(您使用fopen獲取)以便輸出並搜索所需的特定輸出。

真的,你應該只在PHP腳本本身進行驗證。如果你想改變某些東西,以後更安全,更容易和更容易地工作。

+0

謝謝你的回答,我明白這看起來像一個荒謬的問題,因爲JavaScript是客戶端,但是,我有一個非常複雜的JavaScript函數,我需要使用它,我不想將它轉換爲PHP,但我還是不想沒時間了。我已經下載並安裝node.js到我的服務器上執行JavaScript服務器端,我相信這是我的問題的答案!再次感謝。 – rusty009 2012-07-17 01:47:45

+0

很高興幫助,但實際上,你應該*在PHP中編寫函數。如果你的代碼被編寫了,那麼你知道這個邏輯會起作用,並且將它轉換成PHP將花費很少的時間,但是要更安全。在實現我提出的建議的時候,我認爲你可以用PHP重新編碼整個事情。 – Fluffeh 2012-07-17 01:50:03