2011-03-18 171 views
1

我想找到最好和更乾淨的方式來執行一個JavaScript函數,如果PHP會話存在。執行從PHP函數的JavaScript函數

JS-的script.js

  • 有JavaScript功能 - >功能doStuff(){//做的東西}

的index.php

  • 包含js文件 - >在頭
  • 包含P用於檢查$ _SESSION HP類 - >包括DOCTYPE之前

請讓我知道thougts(我使用PHP,JavaScript的,jQuery的)。

  1. 如果$ _SESSION存在,執行js腳本的最佳方法是什麼?
  2. 如果$ _SESSION被銷燬,停止js腳本的最佳方法是什麼?

感謝,

格雷格

+0

你必須有一些客戶端Javascript查詢服務器端PHP腳本的方法。否則,Javascript無法知道會話的當前狀態。請記住,JS在客戶端瀏覽器上執行,而PHP在服務器上執行。 – 2011-03-18 16:44:43

回答

5
<head> 
    <? if (session_is_registered('foo')) echo '<script>doStuff();</script>'; ?> 
    ... 
</head> 

無法跨越的服務器/客戶端邊界,所以最好的情況是轉儲隊列客戶端火的JavaScript頁面上的東西功能。

或者,你可以有像session_verify.php,你可以在一個AJAX調用引用,然後選擇「繼續執行」 /「停止」的基礎上,你收到迴響應。

Pseduo代碼:

if (ajax_response_from_session_verify() == still_logged_in){ 
    execute doSomething(); 
else 
    stop doSomething(); 

但是要記住,調用到會話確認文件可能會延長這取決於您如何使用它的會話。 (我不確定是否需要)

+0

我想說的是布拉德在這裏所說的。如果這沒有幫助,那麼請告訴我們您正在嘗試做什麼,我們可能會提供更多幫助? – jaz9090 2011-03-18 16:46:53

+0

布拉德給出的第一個選項實際上就是我這樣做的方式。我想這不是一個更優雅的方式。現在這個會話已經開始並且JS被執行了,如果會話被銷燬(用戶註銷了一個鏈接),那麼移除JS的最好方法是什麼?我想刷新瀏覽器 - > PHP頭或HTML元刷新。 – Greg 2011-03-18 17:03:04

+0

@Greg:這一切都取決於你如何擁有這種設置。用你的措辭,我假設註銷是一個基於AJAX的請求。所以,如果你足夠的腳本代碼模塊,你可以讓答覆的執行/解除綁定任何需要(基本上執行本地清理)。如果它不是AJAX(或者作爲一般規則),則頁面刷新可能需要最少的努力。 – 2011-03-18 17:26:00

1

你有兩種選擇。

  1. 有一個單獨的功能是文件,包括它只有在會話設置。
  2. 將JS文件作爲PHP文件提供。這將允許您在JS文件中運行PHP命令。只要確保你的內容類型是好的。
0
if(session is OK) { 
    $script = "doStuff();"; 
} 

然後,在你的HTML頭:

<head> 
... 
<script type="text/javascript"> 
document.ready(function() { 
<?php echo $script; ?> 
}); 
</script> 
... 
</head> 
0

布拉德是正確的,你需要使用PHP來輸出到頁面的,因爲你不能直接從服務器調用JS。

寫出腳本標記的另一種方法是通過PHP在HTML中放置一個標記,然後使用JavaScript讀取該標記。舉例來說,你正在使用jQuery的,你可以做這樣的事情:

<div id="sessionExists><?php if (isset($_SESSION['foo'])) echo 'true';?></div> 

而在你的jQuery:

var session = ($('#sessionExists').text() === 'true'))? true : false; 

現在你有一個適用於「sessionExists,」一個布爾一個JS變量,你可以在JS腳本中查詢並採取相應的行動。