2012-05-22 21 views
-4

只是想知道,「typeof」javascript驗證(你知道,你做什麼來檢查在javascript中未定義的變量)不與PHP變量同樣的方式?javascript typeof不能與PHP變量一起使用?

我做

alert(typeof <? echo $_SESSION['thing'] ?>); 

,這甚至不執行(我推測它至少彈出空白)

但如果我這樣做

alert(<? echo $_SESSION['thing'] ?>); 

的警告說「未定義」

所以我想知道是否正確的方法來檢查未定義的PHP變量使用JavaScript只是爲了迴應他們?如果不是,請糾正我,但如果是這樣的話,我認爲這將是很好的分享。

感謝

+0

只是回聲他們。我一直這樣做,因爲它的PHP變量不是一個JS。 – magicianiam

+0

我想這很大程度上取決於你的$ _SESSION ['thing']'的值。你期望在那裏有什麼價值? – Tharabas

+0

php是服務器端,javascript是客戶端 – Boundless

回答

1

在JavaScript中沒有PHP變量這樣的東西。

PHP正在做的是「編寫」JavaScript的輸出文本。

點擊「查看源代碼」並查看PHP放在一起的最終文本。

添加到答案@ Chief17給你:

var x_string_val = "<?php echo ((isset($value) AND !empty($value)) ? $value : $default) ?>"; 
var x_any = <?php echo ((isset($value) AND !empty($value)) ? $value : $default) ?>; 
var x_type = typeof(<?php echo ((isset($value) AND !empty($value)) ? $value : $default) ?>); 

務必從PHP或者輸出報價或JavaScript中引用的值,如果它是一個字符串。否則,它可能會導致更多的錯誤。

+0

我想要做的是從PHP變量中讀取一個結果爲三元條件,以在JavaScript中設置變量。如果PHP爲空/未定義,則將變量設置爲0,如果不是,則將其設置爲 – user1159454

+0

內部的發起者哇,這很難驗證一個變量是不是?我仍然沒有爲什麼這不起作用... <?echo $ _SESSION ['thing']; ?> ==「undefined」)?警報(「是」):警報(「否」); – user1159454

+0

如果事情是4,不會JavaScript讀取作爲4 ==「未定義」(假,所以彈出「否」)? – user1159454

1
if(isset($_SESSION['thing'])) { 
    echo 'thing is set'; 
} else { 
    echo 'thing is not set'; 
} 

這是PHP的方法來檢查,如果一個變量已設置。

http://uk.php.net/isset

編輯:

我想我會做,如果我想檢查在JavaScript中的PHP變量:

<?php 
echo '<script type="text/javascript">alert("'.(isset($variable) ? $variable : 'Undefined Variable').'");</script>'; 
?> 

上面的代碼檢查變量在PHP中設置,如果是,則將其echo發送到警報語句中,如果不是,則會提示空白值。

+0

根據您的目標,代碼可以工作,但是您的答案沒有解決OP誤解發生的實際問題。 – GolezTrol

+0

我的錯,檢查編輯。 – vimist

-2
alert(typeof <? echo $_SESSION['thing'] ?>); 

這有語法錯誤 - 它應該是alert(typeof(some_variable))

alert(<? echo $_SESSION['thing'] ?>); 

這應該是像

alert("<?php echo $_SESSION['thing']; ?>"); 

和你正在嘗試做是沒有意義的,因爲怎麼被JS應該使用不同語言的變量? o.O

+0

typeof是一個操作符而不是函數,它的語法不錯,它是正確的,並且允許使用它而不用括號。然而,這是不好的做法,你應該使用括號。 –

+2

對操作員不使用括號的不良做法?你還寫(1)+(2)嗎? – GolezTrol

+0

引用字符串中的任何PHP輸出意味着最終結果將始終是一個字符串。但是如果你想從PHP輸出** 10e19 **,那麼即使沒有引號,javascript也會認爲它是完全有效的數字語法。隨着qootes你永遠不能輸出一個javascript數組** ** **或一個JavaScript對象** {} ** –

-1

您需要將該變量賦值給一個javascript變量。如果你看看你的PHP已經呈現後的HTML源代碼,你可能會看到類似於:

alert(typeof some value for thing); 

這將是一個語法錯誤。

做到這一點,而不是

var thing = "<?php echo $_SESSION['thing']; ?>"; 
alert(typeof thing); 
+0

然後聲明'var thing =對於一些事物的某些值;'會代替失敗。 – GolezTrol

+0

@GolezTrol的確是我錯過了PHP的引號。現在修復。 – Cfreak

0

試想會有什麼發生。 PHP在服務器上執行。將PHP語句的result插入到發送給客戶端的HTML/JavaScript中。

所以,如果您的會話變量包含Foo,其結果必然是

alert(typeof Foo); 

alert(Foo); 

正如你可能知道,foo是不是在你的客戶端的JavaScript的上下文中定義。

相關問題