2010-10-07 73 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