2010-10-07 72 views

回答

2

我不能完全告訴你,如果完全理解JavaScript和PHP之間的關係進行存取,因此我會假設你沒有。 PHP在服務器上運行並將HTML輸出到瀏覽器(以及一些標題和其他內容)。一旦將HTML發送到瀏覽器,用戶在您的網站上執行的另一個GET或POST請求(或打開持久性Web套接字連接)之前,您的網站無法控制。正如你所提到的那樣,PHP不可能直接讀取散列值,因爲它僅限於瀏覽器,只能通過Javascript訪問。由於針對該特定請求的PHP腳本已停止運行並且頁面數據已輸出到瀏覽器,因此使用Javascript獲取該值的意義何在,將其通過另一個http請求發送回PHP,請使用set_value()功能,然後呢?

如果您使用window.location.hash並將輸入框的值設置爲等於它,您可以在用戶提交表單時使用set_value()。看看CI的set_value()輔助函數:

function set_value($field = '', $default = '') 
    { 
     if (FALSE === ($OBJ =& _get_validation_object())) 
     { 
      if (! isset($_POST[$field])) 
      { 
       return $default; 
      } 

      return form_prep($_POST[$field], $field); 
     } 

     return form_prep($OBJ->set_value($field, $default), $field); 
    } 

它首先檢查您是否設置了表單驗證對象。如果你有,它使用該對象的set_value運行form_prep()函數(大概是爲了管理你在表單驗證中設置的任何規則,如果沒有,它會看到該字段是否存在於$ _POST數組中。它不會,它會返回默認值,如果是,它會返回$ _POST數組的值,所以如果你a)爲它設置一個表單驗證規則,並且b)給這個輸入框指定你想要的名字在你的set_value()函數中使用,你將能夠檢索你使用Javascript輸入到輸入框中的PHP哈希值。

+0

再次感謝您的全面回答treeface,非常感謝。抱歉,遲到的迴應......切線。 – Robimp 2010-10-27 17:21:03

2

在Javascript中,你可以做到這一點可見 hash = window.location.hash;

在PHP中您可以使用parse_url()

 
parse_url() : Return Values 

On seriously malformed URLs, parse_url() may return FALSE. Otherwise an associative array is returned, whose components may be (at least one): 

    * scheme - e.g. http 
    * host 
    * port 
    * user 
    * pass 
    * path 
    * query - after the question mark ? 
    * fragment - after the hashmark # 

+0

嗨阿西夫,謝謝你的回覆。我如何使用window.location.hash獲取散列並將其放在同一頁面上的php函數中? – Robimp 2010-10-07 11:31:01

+1

如果您想在表單元素中指定任何值,可以在同一頁上直接使用JS在使用oForm.elements [「text_element_name」]讀取散列值賦值後設置輸入值value = hash – 2010-10-07 11:42:37

+0

我將如何在PHP函數中使用set_value(),例如? - 參考我上面的問題。 – Robimp 2010-10-07 13:27:50