2014-09-29 112 views
0

我正在使用jQuery驗證插件。每http://jqueryvalidation.org/remote-method,回調用於發送額外的數據(即用戶名)。使用PHP創建jQuery驗證規則

var myObj={ 
    rules: { 
     email: { 
      required: true, 
      email: true, 
      remote: { 
       url: "check-email.php", 
       type: "post", 
       data: { 
        username: function() { 
         return $("#username").val(); 
        } 
       } 
      } 
     } 
    } 
}; 

$("#myform").validate(myObj); 

完美的作品!但是現在,我不想硬編碼myObj對象,而是使用PHP來創建它。請注意,下面的示例腳本非常簡單,並沒有提供驗證插件。

這樣做的一種方法是直接創建JavaScript,就像我爲myObj1所做的那樣。但是,我被告知,由於安全性和故障排除問題,我們不應該使用PHP動態創建JavaScript。相反,我應該將JSON從服務器傳遞到客戶端。

所以,我試圖這樣做myObj2,然而,顯然JSON不能包含JavaScript,它不會解析。

什麼是使用PHP動態創建jQuery驗證規則的最佳方式?

<?php 
$myID='myID'; 
if(isset($_GET['task'])) { 
    header('Content-Type: application/json'); 
    exit("{'data':{'getValue':function() {return $('#{$myID}').val();}}}"); 
} 
else { 
    ?> 

<!DOCTYPE html> 
<html> 
    <head> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js" type="text/javascript"></script> 
     <script> 
     console.log(window,location); 
      <?php echo("var myObj1={'data':{'getValue':function() {return $('#{$myID}').val();}}}");?> 

      $(function() { 
       alert(myObj1.data.getValue()); 

       $.get(location.href+'?task=getJSON',function (myObj2){ 
        alert(myObj2.data.getValue()); 
        },'json'); 

      }); 
     </script> 
    </head> 
    <body> 
     <input id="myID" type="text" value="Hello" /> 
    </body> 
</html> 

    <?php 
} 
?> 
+1

我必須問。 *爲什麼*你需要使用PHP來創建這個?從我的角度來看,這沒有什麼意義。 – Ohgodwhy 2014-09-29 16:55:07

+0

@Ohgodwhy。我有我自己的PHP類,服務器端驗證數據。它也有能力創建jQuery驗證插件對象。這樣,我不必維護兩套驗證腳本。 – user1032531 2014-09-29 16:56:33

+0

所以,只需使用'echo'首先構建正確值的頁面即可。 – Sparky 2014-09-29 16:58:29

回答

0

「什麼是用PHP動態創建jQuery驗證規則的最佳方式?」

沒有「最佳」方式。由於PHP構造服務器上的頁面(包括JavaScript),並且jQuery Validation插件僅在瀏覽器中運行,所以我不理解您的問題。如何使用JavaScript的ajax檢索參數更安全,而不僅僅是使用PHP echo將這些參數放到頁面中,之前它被髮送到瀏覽器?

無論您如何構建頁面,JavaScript代碼在進入瀏覽器時都應該完全一樣。

<script> 
    $(function() { 
     $("#myform").validate(<?php echo .... ;?>); 
    }); 
</script> 
+0

那麼,你覺得用PHP來動態創建JS是可以的嗎? – user1032531 2014-09-29 17:01:47

+0

@ user1032531,爲什麼不呢?所有的PHP都在*被髮送到瀏覽器之前在完全構建頁面的服務器上執行。從瀏覽器的角度來看,它與靜態HTML文件沒有區別。 – Sparky 2014-09-29 17:13:33

+0

我一直使用PHP動態創建jQuery,並且我有一個創建表單驗證規則和消息的特定類,所以我根據經驗知道它工作正常。 – Rasclatt 2014-09-29 17:24:10