2014-09-23 45 views
1

我試圖在jsonoff.php如下使用代碼:是否可以在啓用或未啓用JavaScript的情況下在同一頁面中獲取表單的值?

<?php 
if (isset($_POST['myname'])) { 
    if (!empty($_POST['myname'])) { 
    $myname = $_POST['myname']; 
    echo $myname; 
    } else { 
     echo 'Please type a name'; 
    } 
    exit; //without this, if javascript enabled there will be two times page content. 
    } 
?> 

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Document</title> 
</head> 
<body> 
<div id="notification"></div> 

<form action="" method="POST"> 

    <input type="text" name="myname" id="myname"> 
    <input type="submit" value="Submit" id="submit" > 

</form> 

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
<script type="text/javascript"> 

$(document).ready(function(){ 

    $('#submit').click(function(e){ 

     var myname = $('#myname').val(); 
     $.post('jsonoff.php', {myname : myname} , function(data){ 

     $('#notification').html(data); 

     }); 

    e.preventDefault(); 
    }); 
}); 

</script> 

</body> 
</html> 

exit;線的問題是,如果用戶禁用javascript那麼PHP接管工作,並與該exit;其輸出只是通知div並不顯示該表單。

我想要實現的是,除了頁面刷新結果/顯示將是相同的,並在同一個頁面爲javascript或javascript關閉,以便用戶將有相同的經驗,無論他們禁用javascript或不。

+0

爲什麼退出;這裏需要嗎? – WordpressCoder 2014-09-23 06:02:58

+0

..在exit()之前顯示錶格(再次)? – 2014-09-23 06:03:58

+0

@WordpressCoder嘗試沒有退出的代碼;並看看會發生什麼 – user1906399 2014-09-23 06:12:21

回答

1

如果你想有一個解決辦法,是它很可能,寫上$.post一個布爾標誌,以便它可以辨別jquery post或正常提交:

$.post(document.URL, {myname : myname, fromjs: true} , function(data){ 
             ^^ this one 
    $('#notification').html(data); 

}); 

e.preventDefault(); 

然後在PHP中:

<?php 

$output = ''; 
if (isset($_POST['myname'])) { 
    if (!empty($_POST['myname'])) { 
    $myname = $_POST['myname']; 
    echo $myname; 
    $output = $myname; 
    } else { 
     $output = 'Please type a name'; 
    } 
    if(isset($_POST['fromjs'])) { // if this is sent in JS, trigger an exit 
     exit; //without this, if javascript enabled there will be two times page content. 
    } 
    // if JS is disabled, this will never execute. because index fromjs doesn't exist 
    } 
?> 

殘疾人JS內部通知:

<div id="notification"> 
<?php if($output != '' && !isset($_POST['fromjs'])) { 
    echo $output; 
} ?> 
</div> 

最終產品:

<?php 
$output = ''; 
if (isset($_POST['myname'])) { 
    if (!empty($_POST['myname'])) { 
    $myname = $_POST['myname']; 
    $output = $myname; 
    } else { 
     $output = 'Please type a name'; 
    } 
    if(isset($_POST['fromjs'])) { // if this is sent in JS, trigger an exit 
     echo $output; 
     exit; //without this, if javascript enabled there will be two times page content. 
    } 
    // if JS is disabled, this will never execute. because index fromjs doesn't exist 
    } 
?> 

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Document</title> 
</head> 
<body> 
<div id="notification"> 
<?php if($output != '' && !isset($_POST['fromjs'])) { 
    echo $output; 
} ?> 
</div> 

<form action="" method="POST"> 

    <input type="text" name="myname" id="myname"> 
    <input type="submit" value="Submit" id="submit" > 

</form> 

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
<script type="text/javascript"> 

$(document).ready(function(){ 

    $('#submit').click(function(e){ 

     var myname = $('#myname').val(); 
     $.post(document.URL, {myname : myname, fromjs: true} , function(data){ 

      $('#notification').html(data); 

     }); 

     e.preventDefault(); 
    }); 
}); 

</script> 
+0

很好的解決方法。但是如果JS被禁用了,我怎麼把通知放在通知div中呢?我可以回顯該div,但如果JS啓用它將會像'

The feedback
' – user1906399 2014-09-23 06:27:03

+0

也應該這樣做,以顯示錶單驗證通知或有更好的方法安全明智和這樣的? – user1906399 2014-09-23 06:29:24

+0

@ user1906399好吧,關於通知,你也可以在標記上回顯,只需在div內使用一個布爾標誌,關於驗證,只要確保總是檢查客戶端和服務器端的輸入 – Ghost 2014-09-23 06:38:17

0

實際上,當您在php代碼中使用exit函數時,它正在退出腳本,而不是顯示通知div的事件。它只顯示在退出功能之前被回顯的消息。所以,無論是在頁面末尾使用你的php代碼,還是隻刪除退出函數。

而且它也不會給出與javascript相同的效果。因爲當你使用javascript代碼時,它不會將表單提交到同一頁面,而是使用ajax而不是整個頁面。但是,如果javascript被禁用,則表單將被提交給自己,並且所有頁面的內容會再次刷新。

+0

如果啓用JavaScript,您必須將該退出;否則反饋將再次成爲整個頁面,最終結果將是原始內容的兩倍。 – user1906399 2014-09-23 06:42:27

+0

當您使用JavaScript時,它不會將其視爲表單 – user1906399 2014-09-23 06:43:28

相關問題